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

Project1

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

[已经解决] 关于自定义按键设置 ,Input模块的修改

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
帖子
24
跳转到指定楼层
1
发表于 2013-10-12 19:44:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x

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

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

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

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

·两个按键方式都保留

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

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

2
发表于 2013-10-12 19:59:57 | 只看该作者
左右手交叉即可
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
帖子
24
3
 楼主| 发表于 2013-10-12 20:11:30 | 只看该作者
Sion 发表于 2013-10-12 19:59
左右手交叉即可

我就这样干了
然后被朋友说装高端
他们不知道每一个左右交叉玩游戏的人都有一颗血泪的心

点评

你自己玩,按F1改键位就可以  发表于 2013-10-12 20:14
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
帖子
24
4
 楼主| 发表于 2013-10-12 20:43:50 | 只看该作者
F1只能改固定的键位不能修改HJKL

更不能改方向键
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

5
发表于 2013-10-12 21:52:37 | 只看该作者
本帖最后由 Sion 于 2013-10-13 18:23 编辑

这不科学{:2_283:}

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

键盘脚本更新到楼下。

按键对应ASCII值.rb (2.93 KB, 下载次数: 95)


回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
帖子
24
6
 楼主| 发表于 2013-10-13 00:45:13 | 只看该作者
Sion 发表于 2013-10-12 21:52
这不科学

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

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

这个module Input.rb 脚本没法这么设置
无奈咱水平有限,想优化也无从下手
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

7
发表于 2013-10-13 18:21: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
昨天那个有问题,你怎么用起来没问题..

评分

参与人数 1+1 收起 理由
Vortur + 1 跪谢!终于找到了

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
帖子
24
8
 楼主| 发表于 2013-10-13 19:38:47 | 只看该作者
Sion 发表于 2013-10-13 18:21
class  0}
    return false
  end

7楼认可答案,再次感谢

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

点评

要填坑的话,脚本问题随时会出现  发表于 2013-10-13 21:23
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 10:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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