Project1

标题: 全键盘脚本 [打印本页]

作者: taroxd    时间: 2014-5-21 16:06
标题: 全键盘脚本
本帖最后由 taroxd 于 2015-1-25 19:04 编辑

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● require Taroxd基础设置
  3. #    全键盘脚本
  4. #--------------------------------------------------------------------------
  5.  
  6. module Keyboard
  7.  
  8.   Taroxd::Keyboard = self
  9.  
  10.   BUTTON_L  = 0x01        # left mouse button
  11.   BUTTON_R  = 0x02        # right mouse button
  12.   BUTTON_M  = 0x04        # middle mouse button
  13.   BUTTON_4  = 0x05        # 4th mouse button
  14.   BUTTON_5  = 0x06        # 5th mouse button
  15.  
  16.   BACK      = 0x08        # BACKSPACE key
  17.   TAB       = 0x09        # TAB key
  18.   ENTER     = 0x0D        # ENTER key
  19.   SHIFT     = 0x10        # SHIFT key
  20.   CTLR      = 0x11        # CTLR key
  21.   ALT       = 0x12        # ALT key
  22.   PAUSE     = 0x13        # PAUSE key
  23.   CAPS      = 0x14        # CAPS LOCK key
  24.   ESC       = 0x1B        # ESC key
  25.   SPACE     = 0x20        # SPACEBAR
  26.   PRIOR     = 0x21        # PAGE UP key
  27.   NEXT      = 0x22        # PAGE DOWN key
  28.   self::END = 0x23        # END key
  29.   HOME      = 0x24        # HOME key
  30.   LEFT      = 0x25        # LEFT ARROW key
  31.   UP        = 0x26        # UP ARROW key
  32.   RIGHT     = 0x27        # RIGHT ARROW key
  33.   DOWN      = 0x28        # DOWN ARROW key
  34.   SELECT    = 0x29        # SELECT key
  35.   PRINT     = 0x2A        # PRINT key
  36.   BB        = 0x2B        # SELECT key
  37.   SNAPSHOT  = 0x2C        # PRINT SCREEN key
  38.   INSERT    = 0x2D        # INS key
  39.   DELETE    = 0x2E        # DEL key
  40.  
  41.   NUM0      = 0x30        # 0 key
  42.   NUM1      = 0x31        # 1 key
  43.   NUM2      = 0x32        # 2 key
  44.   NUM3      = 0x33        # 3 key
  45.   NUM4      = 0x34        # 4 key
  46.   NUM5      = 0x35        # 5 key
  47.   NUM6      = 0x36        # 6 key
  48.   NUM7      = 0x37        # 7 key
  49.   NUM8      = 0x38        # 8 key
  50.   NUM9      = 0x39        # 9 key
  51.   A         = 0x41        # A key
  52.   B         = 0x42        # B key
  53.   C         = 0x43        # C key
  54.   D         = 0x44        # D key
  55.   E         = 0x45        # E key
  56.   F         = 0x46        # F key
  57.   G         = 0x47        # G key
  58.   H         = 0x48        # H key
  59.   I         = 0x49        # I key
  60.   J         = 0x4A        # J key
  61.   K         = 0x4B        # K key
  62.   L         = 0x4C        # L key
  63.   M         = 0x4D        # M key
  64.   N         = 0x4E        # N key
  65.   O         = 0x4F        # O key
  66.   P         = 0x50        # P key
  67.   Q         = 0x51        # Q key
  68.   R         = 0x52        # R key
  69.   S         = 0x53        # S key
  70.   T         = 0x54        # T key
  71.   U         = 0x55        # U key
  72.   V         = 0x56        # V key
  73.   W         = 0x57        # W key
  74.   X         = 0x58        # X key
  75.   Y         = 0x59        # Y key
  76.   Z         = 0x5A        # Z key
  77.  
  78.   LWIN      = 0x5B        # Left Windows key (Microsoft Natural keyboard)
  79.   RWIN      = 0x5C        # Right Windows key (Natural keyboard)
  80.   APPS      = 0x5D        # Applications key (Natural keyboard)
  81.  
  82.   NUMPAD0   = 0x60        # Numeric keypad 0 key
  83.   NUMPAD1   = 0x61        # Numeric keypad 1 key
  84.   NUMPAD2   = 0x62        # Numeric keypad 2 key
  85.   NUMPAD3   = 0x63        # Numeric keypad 3 key
  86.   NUMPAD4   = 0x64        # Numeric keypad 4 key
  87.   NUMPAD5   = 0x65        # Numeric keypad 5 key
  88.   NUMPAD6   = 0x66        # Numeric keypad 6 key
  89.   NUMPAD7   = 0x67        # Numeric keypad 7 key
  90.   NUMPAD8   = 0x68        # Numeric keypad 8 key
  91.   NUMPAD9   = 0x69        # Numeric keypad 9 key
  92.   MULTIPLY  = 0x6A        # Multiply key (*)
  93.   ADD       = 0x6B        # Add key (+)
  94.   SEPARATOR = 0x6C        # Separator key
  95.   SUBTRACT  = 0x6D        # Subtract key (-)
  96.   DECIMAL   = 0x6E        # Decimal key
  97.   DIVIDE    = 0x6F        # Divide key (/)
  98.  
  99.   F1        = 0x70        # F1 key
  100.   F2        = 0x71        # F2 key
  101.   F3        = 0x72        # F3 key
  102.   F4        = 0x73        # F4 key
  103.   F5        = 0x74        # F5 key
  104.   F6        = 0x75        # F6 key
  105.   F7        = 0x76        # F7 key
  106.   F8        = 0x77        # F8 key
  107.   F9        = 0x78        # F9 key
  108.   F10       = 0x79        # F10 key
  109.   F11       = 0x7A        # F11 key
  110.   F12       = 0x7B        # F12 key
  111.  
  112.   NUMLOCK   = 0x90        # NUM LOCK key
  113.   SCROLL    = 0x91        # SCROLL LOCK key
  114.  
  115.   LSHIFT    = 0xA0        # Left SHIFT key
  116.   RSHIFT    = 0xA1        # Right SHIFT key
  117.   LCONTROL  = 0xA2        # Left CONTROL key
  118.   RCONTROL  = 0xA3        # Right CONTROL key
  119.   L_ALT     = 0xA4        # Left ALT key
  120.   R_ALT     = 0xA5        # Right ALT key
  121.  
  122.   SEP       = 0xBC        # , key
  123.   DASH      = 0xBD        # - key
  124.   DOTT      = 0xBE        # . Key
  125.  
  126.   API = Win32API.new('user32', 'GetAsyncKeyState', 'I', 'I')
  127.  
  128.   # 以按键码为键,连续按下的帧数为值的 hash
  129.   @states = Hash.new { |h, k| h[k] = 0 }
  130.  
  131.   def self.update
  132.     @states.each_key do |key|
  133.       @states[key] = press?(key) ? @states[key] + 1 : 0
  134.     end
  135.   end
  136.  
  137.   def self.clear
  138.     @states.clear
  139.   end
  140.  
  141.   def self.press?(key)
  142.     API.call(key) < 0
  143.   end
  144.  
  145.   def self.trigger?(key)
  146.     @states[key] == 1
  147.   end
  148.  
  149.   def self.repeat?(key)
  150.     times = @states[key]
  151.     times == 1 || times > 23 && times % 6 == 0
  152.   end
  153. end
  154.  
  155. Scene_Base.send :def_before, :post_start, Keyboard.method(:clear)
  156. Input.singleton_def_after :update, Keyboard.method(:update)





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1