本帖最后由 墨凌羽 于 2015-10-8 08:37 编辑
rm制作选单大概分两部分,选单添加和事件绑定。
选单添加大概是这样(具体的可以通读Window_Command这个类)
#示例代码
add_command(Vocab::item, :item, main_commands_enabled)
#方法和参数说明
# add_command(name, symbol, enabled = true, ext = nil)
# name : 指令名称
# symbol : 对应的符号
# enabled : 有效状态的标志
# ext : 任意的扩展数据
而事件绑定大概如下
#示例代码
@command_window = Window_MenuCommand.new
@command_window.set_handler(:item, method(:command_item))
#方法和参数说明
# set_handler(symbol, method)
# symbol : 要绑定的选单的symbol值
# method : 设置的处理方法 (Method 实例)
先是实例化一个window对象,然后调用set_handler来进行事件绑定。第一个参数要和前边add_command里的第二个参数对应,第二个参数是一个Method对象(这个具体可以参考这里)
选单添加一般是写在相应window类内部的
事件绑定则是在和该对象实例化的同一个地方
比如你打算给菜单界面左部添加选单,就先得在Window_MenuCommand类进行选单添加(具体的是写在该类的make_command_list方法里),然后在Scene_Menu里进行事件绑定(具体在该类的create_command_window方法里)。
代码示例(给菜单场景添加一个名为‘笔记’的选单,效果是会跳转到名为Note的场景)
#Window_MenuCommand类 选单添加 class Window_MenuCommand < Window_Command alias :old_make_command_list :make_command_list #注意,一般为了脚本兼容,不会直接写old_XXX这样的,最好是以脚本作者的名字加日期的格 #式如shitke_151008_make_command_list。alias具体可以参考F1中‘类定义与方法定义’部分 def make_command_list old_make_command_list add_command("笔记", :note, main_commands_enabled) end end #Scene_Menu类 事件绑定 class Scene_Menu < Scene_MenuBase #这里没有同上边一样使用alias,主要是想更清晰的展示‘对象实例化——事件绑定’这一过程 def create_command_window @command_window = Window_MenuCommand.new @command_window.set_handler(:item, method(:command_item)) @command_window.set_handler(:skill, method(:command_personal)) @command_window.set_handler(:equip, method(:command_personal)) @command_window.set_handler(:status, method(:command_personal)) @command_window.set_handler(:formation, method(:command_formation)) @command_window.set_handler(:save, method(:command_save)) @command_window.set_handler(:game_end, method(:command_game_end)) @command_window.set_handler(:cancel, method(:return_scene)) #对窗口对象Window_MenuCommand的实例command_window里的note选单进行事件绑定 @command_window.set_handler(:note, method(:command_note)) end #选单note按下键C(这个C指RMIuput模块的:c,具体包括键盘上的Space, Enter, Z三个按键) #时执行的具体事件 def command_note SceneManager.call(Scene_Note) #直接跳转到笔记场景 end end
#Window_MenuCommand类 选单添加
class Window_MenuCommand < Window_Command
alias :old_make_command_list :make_command_list
#注意,一般为了脚本兼容,不会直接写old_XXX这样的,最好是以脚本作者的名字加日期的格
#式如shitke_151008_make_command_list。alias具体可以参考F1中‘类定义与方法定义’部分
def make_command_list
old_make_command_list
add_command("笔记", :note, main_commands_enabled)
end
end
#Scene_Menu类 事件绑定
class Scene_Menu < Scene_MenuBase
#这里没有同上边一样使用alias,主要是想更清晰的展示‘对象实例化——事件绑定’这一过程
def create_command_window
@command_window = Window_MenuCommand.new
@command_window.set_handler(:item, method(:command_item))
@command_window.set_handler(:skill, method(:command_personal))
@command_window.set_handler(:equip, method(:command_personal))
@command_window.set_handler(:status, method(:command_personal))
@command_window.set_handler(:formation, method(:command_formation))
@command_window.set_handler(:save, method(:command_save))
@command_window.set_handler(:game_end, method(:command_game_end))
@command_window.set_handler(:cancel, method(:return_scene))
#对窗口对象Window_MenuCommand的实例command_window里的note选单进行事件绑定
@command_window.set_handler(:note, method(:command_note))
end
#选单note按下键C(这个C指RMIuput模块的:c,具体包括键盘上的Space, Enter, Z三个按键)
#时执行的具体事件
def command_note
SceneManager.call(Scene_Note) #直接跳转到笔记场景
end
end
P.S要想搞清楚这些最好还是去熟悉Window类(看F1)以及通读Window_Base、Window_Selectable、Window_Command这三个类。把这些搞清楚那么在RM里创建窗口亦或是选单都毫无问题和难度。 |