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

Project1

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

[已经解决] 关于键盘位锁定的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
106
在线时间
470 小时
注册时间
2015-4-26
帖子
92
跳转到指定楼层
1
发表于 2016-5-17 22:25:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我想通过某个环节,暂时将方向键的某个键锁定起来,就是说暂时但某键无效。
例如锁定左键,除非解除锁定,不然在地图中按左键无反应。
希望能用事件脚本控制锁定与否,希望能同时锁定多键。
谢谢。

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
2
发表于 2016-5-18 00:23:44 | 只看该作者
  1. Input.module_eval do
  2.   if !@orig_methods
  3.     @orig_methods = {}
  4.     @locks = []
  5.     Input.methods.each{|m|@orig_methods[m] = Input.method(m)}
  6.     ["trigger?", "press?", "repeat?"].each do |m|
  7.       define_method(m) do |k|
  8.         @locks.include?(k) ? false : @orig_methods[m].call(k)
  9.       end
  10.       module_function m
  11.       public m
  12.     end
  13.     define_method('dir4') do
  14.       @locks.include?(k = @orig_methods['dir4'].call) ? 0 : k
  15.     end
  16.     define_method('dir8') do
  17.       k = @orig_methods['dir8'].call
  18.       return 0 if [2, 4, 6, 8].any?{|d|@locks.include?(d) and k == d}
  19.       case k
  20.       when 1
  21.         return 0 if @locks.include?(2) and @locks.include?(4)
  22.         return 4 if @locks.include?(2)
  23.         return 2 if @locks.include?(4)
  24.       when 3
  25.         return 0 if @locks.include?(2) and @locks.include?(6)
  26.         return 6 if @locks.include?(2)
  27.         return 2 if @locks.include?(6)
  28.       when 7
  29.         return 0 if @locks.include?(8) and @locks.include?(4)
  30.         return 4 if @locks.include?(8)
  31.         return 8 if @locks.include?(4)
  32.       when 9
  33.         return 0 if @locks.include?(6) and @locks.include?(8)
  34.         return 8 if @locks.include?(6)
  35.         return 6 if @locks.include?(8)
  36.       end
  37.       return k
  38.     end
  39.     define_method('lock') do |*args|
  40.       @locks |= args
  41.       @locks.sort!
  42.     end
  43.     define_method('unlock') do |*args|
  44.       args.each{|k|@locks.delete(k)}
  45.     end
  46.     module_function :dir4, :dir8, :lock, :unlock
  47.     public :dir4, :dir8, :lock, :unlock
  48.   end
  49. end
复制代码
上面的插入main之前,下面的是例子,教程范例啥的懒得弄
  1. # 禁用上和右
  2. Input.lock Input::DOWN, Input::RIGHT
  3. # 解禁
  4. Input.unlock Input::DOWN, Input::RIGHT
复制代码

点评

十分感谢  发表于 2016-5-18 22:08

评分

参与人数 2星屑 +20 梦石 +1 收起 理由
RyanBern + 1 认可答案
云海尘清 + 20

查看全部评分

本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 20:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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