查看: 2267|回复: 7

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

[复制链接]
梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
回帖
17
发表于 2013-10-12 19:44:12 | 显示全部楼层 |阅读模式

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

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

×

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

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

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

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

·两个按键方式都保留

(默认按键设置对于左手移动的玩家来首简直就是灾难)
梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-10-12 19:59:57 | 显示全部楼层
左右手交叉即可
回复

使用道具 举报

梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
回帖
17
 楼主| 发表于 2013-10-12 20:11:30 | 显示全部楼层
Sion 发表于 2013-10-12 19:59
左右手交叉即可

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

点评

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

使用道具 举报

梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
回帖
17
 楼主| 发表于 2013-10-12 20:43:50 | 显示全部楼层
F1只能改固定的键位不能修改HJKL

更不能改方向键
回复

使用道具 举报

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

贵宾

发表于 2013-10-12 21:52:37 | 显示全部楼层
本帖最后由 Sion 于 2013-10-13 18:23 编辑

这不科学{:2_283:}

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

键盘脚本更新到楼下。

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


回复

使用道具 举报

梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
回帖
17
 楼主| 发表于 2013-10-13 00:45:13 | 显示全部楼层
Sion 发表于 2013-10-12 21:52
这不科学

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

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

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

使用道具 举报

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

贵宾

发表于 2013-10-13 18:21:21 | 显示全部楼层
[pre lang="ruby" line="1"]class << Input
GetAsyncKeyState = Win32API.new('user32', 'GetAsyncKeyState', 'i','i')
Key_States = Hash.new {0}
KtK = {
LEFT:  [0x41],
UP:    [0x57],
RIGHT: [0x44],
DOWN:  [0x53],
A:     [0x4A],
B:     [0x4B],
C:     [0x4C, 0x0D, 0x5A],
X:     [0x4D],
Y:     [0x4E],
Z:     [0x4F],
R:     [0x50],
L:     [0x51],
F9:    [0x78],
CTRL:  [0x11]
}

attr_reader :dir4, :dir8
  def press?(sym)
    KtK[sym].each {|s| return true if Key_States > 0}
    return false
  end
  def trigger?(sym)
    KtK[sym].each {|s| return true if Key_States == 1}
    return false
  end
  def repeat?(sym)
    KtK[sym].each {|s|
      s = Key_States
      return true if s == 1 || s > 23 && s % 6 == 0
    }
    return false
  end
  #
  def update
    0xBE.times {|i|
      GetAsyncKeyState.call(i) == 0 ? Key_States = 0 : Key_States += 1
    }
    update_dir_state
  end
  def update_dir_state
    if press?(:DOWN)
      if    press?(:LEFT);  @dir8 = 1
      elsif press?(:RIGHT); @dir8 = 3
      else                  @dir8 = 2
      end
      @dir4 = 2
    elsif press?(:LEFT)
      @dir8 = press?(:UP) ? 7 : 4
      @dir4 = 4
    elsif press?(:RIGHT)
      @dir8 = press?(:UP) ? 9 : 6
      @dir4 = 6
    elsif press?(:UP)
      @dir8 = 8
      @dir4 = 8
    else
      @dir8 = 0
      @dir4 = 0
    end
  end
end[/pre]昨天那个有问题,你怎么用起来没问题..

评分

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

查看全部评分

回复 1 0

使用道具 举报

梦石
0
星屑
50
在线时间
140 小时
注册时间
2013-3-16
回帖
17
 楼主| 发表于 2013-10-13 19:38:47 | 显示全部楼层
Sion 发表于 2013-10-13 18:21
class  0}
    return false
  end

7楼认可答案,再次感谢

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

点评

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部