Project1

标题: 关于自定义按键设置 ,Input模块的修改 [打印本页]

作者: 代表月亮消灭你    时间: 2013-10-12 19:44
标题: 关于自定义按键设置 ,Input模块的修改

我想用ASDW代替上下左右
用HJKL代替SHIFT ZXC

如果让我来改·我就在默认脚本里把他的Input.press?和Input.trigger?都一个一个配合全键盘脚本改成自己弄的·这个方法太3+3+3了··
于是我来求3X3的方法·

思路视乎是直接从新定义Input 输入模块(默认脚本以外的东西我完全没法下手了)

如果按下J就等于按下Z这样的思路

·两个按键方式都保留

(默认按键设置对于左手移动的玩家来首简直就是灾难)

作者: Sion    时间: 2013-10-12 19:59
左右手交叉即可
作者: 代表月亮消灭你    时间: 2013-10-12 20:11
Sion 发表于 2013-10-12 19:59
左右手交叉即可

我就这样干了
然后被朋友说装高端
他们不知道每一个左右交叉玩游戏的人都有一颗血泪的心
作者: 代表月亮消灭你    时间: 2013-10-12 20:43
F1只能改固定的键位不能修改HJKL

更不能改方向键
作者: Sion    时间: 2013-10-12 21:52
本帖最后由 Sion 于 2013-10-13 18:23 编辑

这不科学{:2_283:}

那就帮你写一个好了,按键我乱设的,你自己改吧。

键盘脚本更新到楼下。

按键对应ASCII值.rb (2.93 KB, 下载次数: 95)
[attach]196453[/attach]


作者: 代表月亮消灭你    时间: 2013-10-13 00:45
Sion 发表于 2013-10-12 21:52
这不科学

那就帮你写一个好了,按键我乱设的,你自己改吧。

非常感谢版主热心帮助
经过测试一切正常,
但是有一些瑕疵,这个是完全重置了按键设置的脚本
嘛重置也无所谓了,关键是无法设置重复按键
比如我按Z和按回车都是调查事件
再比如我按X或者按Esc都是呼出菜单

这个module Input.rb 脚本没法这么设置
无奈咱水平有限,想优化也无从下手
作者: Sion    时间: 2013-10-13 18:21
RUBY 代码复制
  1. class << Input
  2. GetAsyncKeyState = Win32API.new('user32', 'GetAsyncKeyState', 'i','i')
  3. Key_States = Hash.new {0}
  4. KtK = {
  5. LEFT:  [0x41],
  6. UP:    [0x57],
  7. RIGHT: [0x44],
  8. DOWN:  [0x53],
  9. A:     [0x4A],
  10. B:     [0x4B],
  11. C:     [0x4C, 0x0D, 0x5A],
  12. X:     [0x4D],
  13. Y:     [0x4E],
  14. Z:     [0x4F],
  15. R:     [0x50],
  16. L:     [0x51],
  17. F9:    [0x78],
  18. CTRL:  [0x11]
  19. }
  20.  
  21. attr_reader :dir4, :dir8
  22.   def press?(sym)
  23.     KtK[sym].each {|s| return true if Key_States[s] > 0}
  24.     return false
  25.   end
  26.   def trigger?(sym)
  27.     KtK[sym].each {|s| return true if Key_States[s] == 1}
  28.     return false
  29.   end
  30.   def repeat?(sym)
  31.     KtK[sym].each {|s|
  32.       s = Key_States[s]
  33.       return true if s == 1 || s > 23 && s % 6 == 0
  34.     }
  35.     return false
  36.   end
  37.   #
  38.   def update
  39.     0xBE.times {|i|
  40.       GetAsyncKeyState.call(i) == 0 ? Key_States[i] = 0 : Key_States[i] += 1
  41.     }
  42.     update_dir_state
  43.   end
  44.   def update_dir_state
  45.     if press?(:DOWN)
  46.       if    press?(:LEFT);  @dir8 = 1
  47.       elsif press?(:RIGHT); @dir8 = 3
  48.       else                  @dir8 = 2
  49.       end
  50.       @dir4 = 2
  51.     elsif press?(:LEFT)
  52.       @dir8 = press?(:UP) ? 7 : 4
  53.       @dir4 = 4
  54.     elsif press?(:RIGHT)
  55.       @dir8 = press?(:UP) ? 9 : 6
  56.       @dir4 = 6
  57.     elsif press?(:UP)
  58.       @dir8 = 8
  59.       @dir4 = 8
  60.     else
  61.       @dir8 = 0
  62.       @dir4 = 0
  63.     end
  64.   end
  65. end
昨天那个有问题,你怎么用起来没问题..
作者: 代表月亮消灭你    时间: 2013-10-13 19:38
Sion 发表于 2013-10-13 18:21
class  0}
    return false
  end

7楼认可答案,再次感谢

继续填坑去了,希望以后再也不会有脚本问题了,太折磨人了




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