查看: 1467|回复: 0

简化命令窗口的 handler 设置

[复制链接]

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-1-31 21:45:08 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 taroxd 于 2015-2-1 08:43 编辑

暂时没什么用。可能会给日后的偷懒打下基础。

[pre lang="ruby" line="1"]
#--------------------------------------------------------------------------
# ● 简化命令窗口的 handler 设置
#--------------------------------------------------------------------------

module Taroxd

  # Window_Command 的子类 include 后,会自动对场景调用 symbol 对应的
  # command_symbol 方法,无需再 set_handler。
  module SymbolHandler

    def handle?(symbol)
      super || symbol_to_command(symbol)
    end

    def call_handler(symbol)
      @handler[symbol].call if @handler.key?(symbol)
      command = symbol_to_command(symbol)
      receiver.send(command) if command
    end

    private

    # 以下方法可由子类覆盖。

    # 调用者。默认为当前场景。
    def receiver
      SceneManager.scene
    end

    def command_prefix
      'command_'
    end

    # 返回符号对应的场景方法名。
    # 场景不能响应 command_symbol 时,返回 nil。
    def symbol_to_command(symbol)
      sym = :"#{command_prefix}#{symbol}"
      sym if receiver.respond_to?(sym)
    end
  end
end
[/pre]

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

在本发帖返回顶部