设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

關於在主菜單內 在自行新增一個菜單 的問題

查看数: 1961 | 评论数: 7 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-11-11 21:48

正文摘要:

本帖最后由 御之嵐 于 2013-11-12 21:51 编辑 RT 目前的成果是 主選單內 新增了一個選項 名為『新增的選單』 用來顯示一些參數的資訊 但是加入了返回指令後 仍然辦法返回 ============================= ...

回复

喵呜喵5 发表于 2013-11-12 18:04:07
自己写了一遍以后终于发现你的问题出在哪里了

Window_Selectable的子类在载入后会deactivate而你的任务窗口载入之后没有activate,所以窗口没有被激活,无法响应你的操作

以下是完整的脚本:
  1. #~ 窗口部分
  2. #~ 菜单添加选项
  3. class Window_MenuCommand < Window_Command
  4.   alias m5_20131112_add_original_commands add_original_commands
  5.   def add_original_commands
  6.     m5_20131112_add_original_commands
  7.     add_command("查看任务", :m5_task)
  8.   end
  9. end
  10. #~ 设置显示任务的窗口
  11. class Window_M5Task < Window_Selectable
  12.   def initialize
  13.     super(0, 0, Graphics.width, Graphics.height)
  14.     draw_text_ex(4, 0, "随便写点什么玩意儿吧")
  15.     activate
  16.   end
  17. end
  18. #~ 场景部分
  19. #~ 场景添加方法
  20. class Scene_Menu < Scene_MenuBase
  21.   alias m5_20131112_create_command_window create_command_window
  22.   def create_command_window
  23.     m5_20131112_create_command_window
  24.     @command_window.set_handler(:m5_task,method(:command_m5_task))
  25.   end
  26.   def command_m5_task
  27.     SceneManager.call(Scene_M5Task)
  28.   end
  29. end
  30. #~ 设置显示任务的场景
  31. class Scene_M5Task < Scene_MenuBase  
  32.   def start
  33.     super
  34.     @status_window = Window_M5Task.new
  35.     @status_window.set_handler(:cancel,   method(:return_scene))
  36.   end  
  37. end
复制代码

点评

感謝,我了解了,就是視窗開啟之後 要多加一句 activate 功能才會作用,對吧?。感謝你的幫忙  发表于 2013-11-12 21:29

评分

参与人数 1星屑 +2 收起 理由
御之嵐 + 2

查看全部评分

喵呜喵5 发表于 2013-11-12 17:32:14
虽然你说你已经改了但是我看了你的脚本还是非常混乱……
Scene_Menu里面你还没有定义名为command_task的方法居然没有报错还能用的好好的实在不可思议……

默认情况下,如果你没有对自带脚本修改的太过分,离开某个scene界面的方法使用的是下面这句:
  1. @menu_command.set_handler(:cancel,    method(:return_scene))
复制代码
这句的意思是告诉系统在当前的场景中这个窗口支持一个名字叫cancel的处理,这个处理对应的内容为return_scene

上面的处理被用在了Window_Selectable及其子类中
  1.   def cancel_enabled?
  2.     handle?(:cancel)
  3.   end
复制代码
这个方法用来检查这个窗口在当前场景是否有名为cancel的处理,如果有,则表示这个窗口支持取消
  1.   def process_handling
  2.     return unless open? && active
  3.     return process_ok       if ok_enabled?        && Input.trigger?(:C)
  4.     return process_cancel   if cancel_enabled?    && Input.trigger?(:B)
  5.     return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
  6.     return process_pageup   if handle?(:pageup)   && Input.trigger?(:L)
  7.   end
复制代码
上面这个方法用于判定玩家按下了哪些按键并判定按键是否有效,比如这个例子中,第四行就判定了玩家是否按下了取消键同时窗口是否支持取消键,如果支持的话,便会执行取消的处理
  1.   def process_cancel
  2.     Sound.play_cancel
  3.     Input.update
  4.     deactivate
  5.     call_cancel_handler
  6.   end
  7.   def call_cancel_handler
  8.     call_handler(:cancel)
  9.   end
复制代码
上面的代码就是取消的处理,关键其实是倒数第二行的call_handler(:cancel),这句代码的作用就是执行该场景中给取消键定义的方法

于是回到最开始的场景中
@menu_command.set_handler(:cancel,    method(:return_scene))

前面已经说了,这个取消对应的方法是return_scene,这个return_scene在Scene_Base中,也就是基本上所有的场景默认都支持这个方法
RUBY 代码复制
  1. def return_scene
  2.     SceneManager.return
  3.   end

这句中的SceneManager.return就是返回到上一个场景,即离开任务界面返回菜单界面的主要语句。

评分

参与人数 1星屑 +1 收起 理由
御之嵐 + 1 那個,我是在文章忘了說明吶 ( 艸).

查看全部评分

774741359 发表于 2013-11-12 14:31:16
御之嵐 发表于 2013-11-12 14:21
昨天也有測試出來了
只是不太肯定是不是那個的關係  所以就跑來問問了

VA简化了很多步骤,建议都自己写一写。

点评

恩 了解  发表于 2013-11-12 21:14
御之嵐 发表于 2013-11-12 14:21:18
本帖最后由 御之嵐 于 2013-11-12 14:30 编辑
774741359 发表于 2013-11-11 23:47
没有来获取玩家的退出指令的代码


昨天也有測試出來了
只是不太肯定是不是那個的關係  所以就跑來問問了

Window_Task
改成了
RUBY 代码复制
  1. class Window_Task < Window_Selectable
  2. #--------------------------------------------------------------------------
  3.   # ● 初始化對象
  4.   #--------------------------------------------------------------------------
  5.   def initialize(actor)
  6.     super(0, 0, Graphics.width, Graphics.height)
  7.      @actor= actor
  8.     refresh
  9.     activate
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 設置角色
  13.   #--------------------------------------------------------------------------
  14.   def actor=(actor)
  15.     return if @actor== actor
  16.     @actor= actor
  17.   end
  18. end



Scene_Task
改成了
RUBY 代码复制
  1. class Scene_Task< Scene_MenuBase            
  2.  
  3.   #--------------------------------------------------------------------------
  4.   # ● 開始處理
  5.   #--------------------------------------------------------------------------
  6.   def start                               #開始
  7.     super
  8.     create_background               #創建選單背景
  9.     create_menu_command
  10.   end
  11.  
  12.   #----------------------------------------------------------------------------
  13. # * 创建菜单选项
  14. #----------------------------------------------------------------------------
  15. def create_menu_command
  16.   @menu_command = Window_Task.new(@actor)
  17. #~ @menu_command = Window_Task.new
  18.   @menu_command.set_handler(:cancel,    method(:return_scene))
  19. end
  20.  
  21.   #--------------------------------------------------------------------------
  22.   # ● 生成背景
  23.   #--------------------------------------------------------------------------
  24.   def create_background
  25.     @background_sprite = Sprite.new
  26.     @background_sprite.bitmap = SceneManager.background_bitmap
  27.     @background_sprite.color.set(16, 16, 16, 128)
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 釋放背景
  31.   #--------------------------------------------------------------------------
  32.   def dispose_background
  33.     @background_sprite.dispose
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 結束處理
  37.   #--------------------------------------------------------------------------
  38.   def terminate
  39.     super
  40.     dispose_background
  41.   end
  42. end


這樣的確是可以返回了...

這只是利用Window_Status
東砍西砍 誤打誤撞的結果
不知道有沒有比較漂亮的寫法?   
774741359 发表于 2013-11-11 23:47:03
没有来获取玩家的退出指令的代码

评分

参与人数 1星屑 +1 收起 理由
御之嵐 + 1

查看全部评分

喵呜喵5 发表于 2013-11-11 23:40:49
没有改scene_menu?
你是怎么进去的……?

点评

漏了,已補上  发表于 2013-11-12 14:13
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2026-6-8 22:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表