设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2215|回复: 7
打印 上一主题 下一主题

[已经解决] 全键盘Input.repeat 问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
110
在线时间
326 小时
注册时间
2010-7-4
帖子
80
跳转到指定楼层
1
发表于 2012-7-28 19:08:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想自定义按键,于是改了Window_Selectable 131行
想把DOWN改成"S"键,请问应怎么改?
知道的亲说下,谢谢

Lv2.观梦者

梦石
0
星屑
672
在线时间
2184 小时
注册时间
2009-12-6
帖子
607

开拓者

2
发表于 2012-7-28 19:16:25 | 只看该作者
全局搜索:
if Input.repeat?(Input::DOWN)
都改为
if Input.repeat?(Input::Y)

RM按钮   键盘按键
X         :      A
Y         :      S
Z         :      D
R         :      W
L          :      Q


如果LZ想把上下左右操作键改成WASD等等的话建议搜索一下全键盘脚本。
往事简直不堪回首,稍微做点想做的事吧
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
326 小时
注册时间
2010-7-4
帖子
80
3
 楼主| 发表于 2012-7-28 19:23:45 | 只看该作者
ML4455739 发表于 2012-7-28 19:16
全局搜索:
if Input.repeat?(Input::DOWN)
都改为

我用了全键盘了
那如果我要改成其它rm没对应的键呢要怎么改?

点评

可以麻烦您先把您所使用的全键盘脚本发上来一下吗?因为网上有多个版本。  发表于 2012-7-28 19:34
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
326 小时
注册时间
2010-7-4
帖子
80
4
 楼主| 发表于 2012-7-28 19:36:48 | 只看该作者
这是我用的全键盘:
  1. module Kboard
  2.   
  3.   $RMouse_BUTTON_L = 0x01        # left mouse button
  4.   $RMouse_BUTTON_R = 0x02        # right mouse button
  5.   $RMouse_BUTTON_M = 0x04        # middle mouse button
  6.   $RMouse_BUTTON_4 = 0x05        # 4th mouse button # only tested with win2k with a logitech mouse (MX900)
  7.   $RMouse_BUTTON_5 = 0x06        # 5th mouse button # only tested with win2k with a logitech mouse (MX900)

  8.   $R_Key_BACK      = 0x08        # BACKSPACE key
  9.   $R_Key_TAB       = 0x09        # TAB key
  10.   $R_Key_RETURN    = 0x0D        # ENTER key
  11.   $R_Key_SHIFT     = 0x10        # SHIFT key
  12.   $R_Key_PAUSE     = 0x13        # PAUSE key
  13.   $R_Key_CAPITAL   = 0x14        # CAPS LOCK key
  14.   $R_Key_ESCAPE    = 0x1B        # ESC key
  15.   $R_Key_SPACE     = 0x20        # SPACEBAR
  16.   $R_Key_PRIOR     = 0x21        # PAGE UP key
  17.   $R_Key_NEXT      = 0x22        # PAGE DOWN key
  18.   $R_Key_END       = 0x23        # END key
  19.   $R_Key_HOME      = 0x24        # HOME key
  20.   $R_Key_LEFT      = 0x25        # LEFT ARROW key
  21.   $R_Key_UP        = 0x26        # UP ARROW key
  22.   $R_Key_RIGHT     = 0x27        # RIGHT ARROW key
  23.   $R_Key_DOWN      = 0x28        # DOWN ARROW key
  24.   $R_Key_SELECT    = 0x29        # SELECT key
  25.   $R_Key_PRINT     = 0x2A        # PRINT key
  26.   $R_Key_SNAPSHOT  = 0x2C        # PRINT SCREEN key
  27.   $R_Key_INSERT    = 0x2D        # INS key
  28.   $R_Key_DELETE    = 0x2E        # DEL key
  29.   
  30.   $R_Key_0         = 0x30        # 0 key
  31.   $R_Key_1         = 0x31        # 1 key
  32.   $R_Key_2         = 0x32        # 2 key
  33.   $R_Key_3         = 0x33        # 3 key
  34.   $R_Key_4         = 0x34        # 4 key
  35.   $R_Key_5         = 0x35        # 5 key
  36.   $R_Key_6         = 0x36        # 6 key
  37.   $R_Key_7         = 0x37        # 7 key
  38.   $R_Key_8         = 0x38        # 8 key
  39.   $R_Key_9         = 0x39        # 9 key

  40.   $R_Key_A         = 0x41        # A key
  41.   $R_Key_B         = 0x42        # B key
  42.   $R_Key_C         = 0x43        # C key
  43.   $R_Key_D         = 0x44        # D key
  44.   $R_Key_E         = 0x45        # E key
  45.   $R_Key_F         = 0x46        # F key
  46.   $R_Key_G         = 0x47        # G key
  47.   $R_Key_H         = 0x48        # H key
  48.   $R_Key_I         = 0x49        # I key
  49.   $R_Key_J         = 0x4A        # J key
  50.   $R_Key_K         = 0x4B        # K key
  51.   $R_Key_L         = 0x4C        # L key
  52.   $R_Key_M         = 0x4D        # M key
  53.   $R_Key_N         = 0x4E        # N key
  54.   $R_Key_O         = 0x4F        # O key
  55.   $R_Key_P         = 0x50        # P key
  56.   $R_Key_Q         = 0x51        # Q key
  57.   $R_Key_R         = 0x52        # R key
  58.   $R_Key_S         = 0x53        # S key
  59.   $R_Key_T         = 0x54        # T key
  60.   $R_Key_U         = 0x55        # U key
  61.   $R_Key_V         = 0x56        # V key
  62.   $R_Key_W         = 0x57        # W key
  63.   $R_Key_X         = 0x58        # X key
  64.   $R_Key_Y         = 0x59        # Y key
  65.   $R_Key_Z         = 0x5A        # Z key

  66.   $R_Key_LWIN      = 0x5B        # Left Windows key (Microsoft Natural keyboard)
  67.   $R_Key_RWIN      = 0x5C        # Right Windows key (Natural keyboard)
  68.   $R_Key_APPS      = 0x5D        # Applications key (Natural keyboard)

  69.   $R_Key_NUMPAD0   = 0x60        # Numeric keypad 0 key
  70.   $R_Key_NUMPAD1   = 0x61        # Numeric keypad 1 key
  71.   $R_Key_NUMPAD2   = 0x62        # Numeric keypad 2 key
  72.   $R_Key_NUMPAD3   = 0x63        # Numeric keypad 3 key
  73.   $R_Key_NUMPAD4   = 0x64        # Numeric keypad 4 key
  74.   $R_Key_NUMPAD5   = 0x65        # Numeric keypad 5 key
  75.   $R_Key_NUMPAD6   = 0x66        # Numeric keypad 6 key
  76.   $R_Key_NUMPAD7   = 0x67        # Numeric keypad 7 key
  77.   $R_Key_NUMPAD8   = 0x68        # Numeric keypad 8 key
  78.   $R_Key_NUMPAD9         = 0x69        # Numeric keypad 9 key
  79.   $R_Key_MULTIPLY  = 0x6A        # Multiply key (*)
  80.   $R_Key_ADD       = 0x6B        # Add key (+)
  81.   $R_Key_SEPARATOR = 0x6C        # Separator key
  82.   $R_Key_SUBTRACT  = 0x6D        # Subtract key (-)
  83.   $R_Key_DECIMAL   = 0x6E        # Decimal key
  84.   $R_Key_DIVIDE    = 0x6F        # Divide key (/)

  85.   $R_Key_F1        = 0x70        # F1 key
  86.   $R_Key_F2        = 0x71        # F2 key
  87.   $R_Key_F3        = 0x72        # F3 key
  88.   $R_Key_F4        = 0x73        # F4 key
  89.   $R_Key_F5        = 0x74        # F5 key
  90.   $R_Key_F6        = 0x75        # F6 key
  91.   $R_Key_F7        = 0x76        # F7 key
  92.   $R_Key_F8        = 0x77        # F8 key
  93.   $R_Key_F9        = 0x78        # F9 key
  94.   $R_Key_F10       = 0x79        # F10 key
  95.   $R_Key_F11       = 0x7A        # F11 key
  96.   $R_Key_F12       = 0x7B        # F12 key

  97.   $R_Key_NUMLOCK   = 0x90        # NUM LOCK key
  98.   $R_Key_SCROLL    = 0x91        # SCROLL LOCK key

  99.   $R_Key_LSHIFT           = 0xA0        # Left SHIFT key
  100.   $R_Key_RSHIFT           = 0xA1        # Right SHIFT key
  101.   $R_Key_LCONTROL  = 0xA2        # Left CONTROL key
  102.   $R_Key_RCONTROL  = 0xA3        # Right CONTROL key
  103.   $R_Key_L_ALT           = 0xA4        # Left ALT key
  104.   $R_Key_R_ALT           = 0xA5        # Right ALT key
  105.   
  106.   $R_Key_SEP             = 0xBC        # , key
  107.   $R_Key_DASH             = 0xBD        # - key
  108.   $R_Key_DOTT             = 0xBE        # . key

  109.   $R_Key_DENGHAO   = 0xC0        # = key
  110.   
  111.   
  112.   
  113.   GetKeyState = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
  114.   GetKeyboardState = Win32API.new("user32","GetKeyState",['i'],'i')
  115.   GetSetKeyState = Win32API.new("user32","SetKeyboardState",['i'],'i')
  116.   
  117.   module_function
  118.   
  119.   def keyboard(rkey)
  120.     GetKeyState.call(rkey) & 0x01 == 1  #
  121.   end
  122.   
  123.   def key(rkey, key = 0)
  124.     GetKeyboardState.call(rkey) & 0x01 == key #
  125.   end
  126.   if Kboard.keyboard($R_Key_1)
  127.       print "1...."
  128.       end
  129. end
复制代码
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
672
在线时间
2184 小时
注册时间
2009-12-6
帖子
607

开拓者

5
发表于 2012-7-28 19:42:25 | 只看该作者
本帖最后由 ML4455739 于 2012-7-28 19:45 编辑

134行这里有个例子啦=v=
  1. if Kboard.keyboard($R_Key_1)
复制代码
把原本是if Input.trigger?(Input::X)
之类的按键判定改为例子那样的就行了。

9~117行是可选按键,例如要判断按下J的话,
  1. if Kboard.keyboard($R_Key_J)
复制代码
另外要注意的就是,使用了全键盘应该在游戏中做一个事先说明,
修改过默认的按键判定会使F1里的键位设置失效。
往事简直不堪回首,稍微做点想做的事吧
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
326 小时
注册时间
2010-7-4
帖子
80
6
 楼主| 发表于 2012-7-28 19:50:05 | 只看该作者
ML4455739 发表于 2012-7-28 19:42
134行这里有个例子啦=v=把原本是if Input.trigger?(Input::X)
之类的按键判定改为例子那样的就行了。

表示无效131 改成if Kboard.keyboard($R_Key_S)后按“s”键无效

点评

请您稍等一会儿,我去测试一下。  发表于 2012-7-28 19:51
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
672
在线时间
2184 小时
注册时间
2009-12-6
帖子
607

开拓者

7
发表于 2012-7-28 19:56:43 | 只看该作者
  1. # 判定示例:
  2. #1、Kboard.press?(key) 同 Input.press?(key)
  3. #2、Kboard.repeat?(key) 同 Input.repeat?(key)
  4. #3、Kboard.trigger?(key) 同 Input.trigger?(key)


  5. module Kboard

  6. module_function

  7. @R_Key_Hash = {}
  8. @R_Key_Repeat = {}

  9. GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')

  10. def press?(rkey)
  11.    return GetKeyState.call(rkey) != 0
  12. end

  13. def repeat?(rkey)
  14.    result = GetKeyState.call(rkey)
  15.    if result != 0
  16.      if @R_Key_Repeat[rkey].nil?
  17.        @R_Key_Repeat[rkey] = 0
  18.        return true
  19.      end
  20.      @R_Key_Repeat[rkey] += 1
  21.    else
  22.      @R_Key_Repeat[rkey] = nil
  23.      @R_Key_Hash[rkey] = 0
  24.    end
  25.    if !@R_Key_Repeat[rkey].nil? and @R_Key_Repeat[rkey] > 4 # 4乃准确数字
  26.      @R_Key_Repeat[rkey] = 0
  27.      return true
  28.    else
  29.      return false
  30.    end
  31. end

  32. def trigger?(rkey)
  33.    result = GetKeyState.call(rkey)
  34.    if @R_Key_Hash[rkey] == 1 and result != 0
  35.      return false
  36.    end
  37.    if result != 0
  38.      @R_Key_Hash[rkey] = 1
  39.      return true
  40.    else
  41.      @R_Key_Hash[rkey] = 0
  42.      return false
  43.    end
  44. end

  45. end


复制代码
请您把这个脚本植入到您的全键盘脚本的下面,
正确的判定格式为if Kboard.trigger?($R_Key_S)
往事简直不堪回首,稍微做点想做的事吧
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
326 小时
注册时间
2010-7-4
帖子
80
8
 楼主| 发表于 2012-7-28 20:00:01 | 只看该作者
成功!谢谢了,版主可以结贴了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-23 13:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表