赞 | 0 |
VIP | 289 |
好人卡 | 7 |
积分 | 1 |
经验 | 7622 |
最后登录 | 2024-2-4 |
在线时间 | 400 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 65
- 在线时间
- 400 小时
- 注册时间
- 2005-10-24
- 帖子
- 634
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 叶子 于 2015-8-12 12:58 编辑
RMVA的DEMO:
InputFocus.zip
(1.43 MB, 下载次数: 66)
填坑过程中产生的一个可以独立出来的东西- =begin
- InputFocus
- Author: leav
- 功能:
- 解除使用Input的对象之间的耦合,让每个对象管理自己的焦点,
- 而不必知道其他对象的激活情况
- 应用:
- 自制UI,复杂的机关等
- =end
- module Input
- class << self
- #--------------------------------------------------------------------------
- # ● 返回焦点堆栈
- #--------------------------------------------------------------------------
- def get_focus_stack
- return @focus_stack || @focus_stack = []
- end
- #--------------------------------------------------------------------------
- # ● 返回object是否处于焦点
- #--------------------------------------------------------------------------
- def focus?(object)
- focus = self.get_focus_stack.last
- return focus == nil || focus == object
- end
- #--------------------------------------------------------------------------
- # ● 焦点object
- #--------------------------------------------------------------------------
- def focus(object)
- raise "Input.focus() cannot have nil parameter" if object == nil
- unfocus(object)
- get_focus_stack.push(object)
- end
- #--------------------------------------------------------------------------
- # ● 取消object焦点
- #--------------------------------------------------------------------------
- def unfocus(object)
- raise "Input.unfocus() cannot have nil parameter" if object == nil
- get_focus_stack.reject! do |item|
- item == object
- end
- end
- #--------------------------------------------------------------------------
- # ● 重定义Input方法
- # Input只会对处于焦点的对象有响应
- #--------------------------------------------------------------------------
- if @input_focus_old_defined == nil
- %w[press? trigger? repeat?].each do |symbol|
- eval("
- alias :input_focus_old_#{symbol} :#{symbol}
- def #{symbol}(key, object = nil)
- if focus?(object)
- return input_focus_old_#{symbol}(key)
- else
- return false
- end
- end
- ")
- end
- %w[dir4 dir8].each do |symbol|
- eval("
- alias :input_focus_old_#{symbol} :#{symbol}
- def #{symbol}(object = nil)
- if focus?(object)
- return input_focus_old_#{symbol}()
- else
- return 0
- end
- end
- ")
- end
- @input_focus_old_defined = true
- end
- end
- end
复制代码 |
|