Project1

标题: 关于键盘位锁定的问题 [打印本页]

作者: 云海尘清    时间: 2016-5-17 22:25
标题: 关于键盘位锁定的问题
我想通过某个环节,暂时将方向键的某个键锁定起来,就是说暂时但某键无效。
例如锁定左键,除非解除锁定,不然在地图中按左键无反应。
希望能用事件脚本控制锁定与否,希望能同时锁定多键。
谢谢。
作者: 英顺的马甲    时间: 2016-5-18 00:23
  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
复制代码





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