Project1

标题: [已解决]从自定义的子菜单返回时如何固定光标位置 [打印本页]

作者: 饿啊    时间: 2024-10-6 13:07
标题: [已解决]从自定义的子菜单返回时如何固定光标位置
本帖最后由 饿啊 于 2024-10-10 11:49 编辑

闲来无事搓了如下的“更多功能”子菜单小脚本:

RUBY 代码复制
  1. class Window_ExtraMenuCommand < Window_MenuCommand #"更多功能"子菜单
  2.   def make_command_list
  3.     add_command("任务/书籍",:book,true)
  4.     add_command("自主合成",:itemsynthesis,$game_system.i_rcp_sw.size > 0)
  5.     unless TMMEDAL::HIDE_COMMAND && !medal_enabled
  6.       add_command(TMMEDAL::COMMAND_MEDAL, :medal, medal_enabled)
  7.     end
  8.     add_command("返回上级",:originmenu,true)
  9.   end
  10. end
  11. #==============================================================================
  12. #“更多功能”窗口的Scene_ExtraMenu扩展
  13. #==============================================================================
  14. class Scene_ExtraMenu < Scene_Menu
  15.   #--------------------------------------------------------------------------
  16.   # ● 菜单条目生成
  17.   #--------------------------------------------------------------------------
  18.   def create_command_window
  19.     @command_window = Window_ExtraMenuCommand.new
  20.     @command_window.set_handler(:medal, method(:command_medal))
  21.     @command_window.set_handler(:book, method(:command_book))
  22.     @command_window.set_handler(:itemsynthesis, method(:command_itemsynthesis))
  23.     @command_window.set_handler(:originmenu, method(:return_scene))
  24.     @command_window.set_handler(:cancel,    method(:return_scene))
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # 窗口调用
  28.   #--------------------------------------------------------------------------
  29.   def command_medal
  30.     SceneManager.call(Scene_Medal)
  31.   end
  32.  
  33.   def command_book
  34.     SceneManager.call(Scene_Book)
  35.   end
  36.  
  37.   def command_itemsynthesis
  38.     SceneManager.call(Scene_ItemSynthesis)
  39.   end
  40. end

随后在Scene_Menu中做了如下处理,以使得能在主菜单中出现“更多功能”的选项
代码复制
  1. @command_window.set_handler(:moreoptions, method(:command_moreoptions)) #位于"生成指令窗口"处
  2. def command_moreoptions
  3.     #@command_window.dispose
  4.     #@command_window = Window_ExtraMenuCommand.new
  5.     SceneManager.call(Scene_ExtraMenu)
  6.   end  #新增于各种指令处


运行虽然比较完美,但有一个小问题:如果直接按ESC还好,但只要我在子菜单中对任意选项进行“确认”操作后,返回主菜单时光标都会停在最上面一条。我想把光标固定在主菜单的“更多功能”上,请问我该如何进一步改写?


作者: 喵呜喵5    时间: 2024-10-8 13:51
打开菜单时的选项位置是 Window_MenuCommand 的 @@last_command_symbol 在控制的,你的 “子菜单中对任意选项进行“确认”操作” 是不是改了这个?
作者: 喵呜喵5    时间: 2024-10-9 13:53
你自己内部界面里的选项窗口,不要作为 Window_MenuCommand 的子类,而是直接作为 Window_Command 的子类就没这问题了
作者: 饿啊    时间: 2024-10-10 11:18
本帖最后由 饿啊 于 2024-10-10 11:45 编辑

感谢提点,另对父类修改后还需要对一楼中脚本主体的第19行做出如下改动:
代码复制
  1. @command_window = Window_ExtraMenuCommand.new(0,0)

以及如果有后来的兄弟想引入这个脚本,还是用如下的改良版好些,(请务必配合一楼中对于Scene_Manager的改动)起码不会报错:
RUBY 代码复制
  1. #=================================================================
  2. #"更多功能"子菜单
  3. #=================================================================
  4. class Window_ExtraMenuCommand < Window_Command
  5.   def make_command_list
  6. #~     add_command("任务/书籍",:book,true)
  7. #~     add_command("自主合成",:itemsynthesis,$game_system.i_rcp_sw.size > 0)
  8. #~     unless TMMEDAL::HIDE_COMMAND && !medal_enabled
  9. #~       add_command(TMMEDAL::COMMAND_MEDAL, :medal, medal_enabled)
  10. #~     end
  11.     add_command("返回上级",:originmenu,true)
  12.     #此处仅保留"返回上级",以适配其他工程
  13.   end
  14. end
  15. #==============================================================================
  16. #MenuCommand扩展
  17. #==============================================================================
  18. class Window_MenuCommand
  19.   alias saren_extramenu_add_original_commands add_original_commands
  20.   def add_original_commands
  21.     saren_extramenu_add_original_commands
  22.     add_command("更多功能",:moreoptions,true)
  23.   end
  24. end
  25.  
  26. #==============================================================================
  27. #“更多功能”窗口的Scene_ExtraMenu扩展
  28. #==============================================================================
  29. class Scene_ExtraMenu < Scene_Menu
  30.  
  31.   #--------------------------------------------------------------------------
  32.   # ● 菜单条目生成
  33.   #--------------------------------------------------------------------------
  34.   def create_command_window
  35.     @command_window = Window_ExtraMenuCommand.new(0,0)
  36. #~     @command_window.set_handler(:medal, method(:command_medal))
  37. #~     @command_window.set_handler(:book, method(:command_book))
  38. #~     @command_window.set_handler(:itemsynthesis, method(:command_itemsynthesis))
  39.     @command_window.set_handler(:originmenu, method(:return_scene))
  40.     @command_window.set_handler(:cancel,    method(:return_scene))
  41.     #此处仅保留"返回上级",以适配其他工程
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # 窗口调用
  45.   #--------------------------------------------------------------------------
  46. #~   def command_medal
  47. #~     SceneManager.call(Scene_Medal)
  48. #~   end
  49.  
  50. end

如果还有其他使用上的疑问,烦请告知我。




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