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

Project1

 找回密码
 注册会员
搜索
查看: 1745|回复: 7
打印 上一主题 下一主题

[已经解决] 關於在主菜單內 在自行新增一個菜單 的問題

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3371
在线时间
665 小时
注册时间
2009-1-21
帖子
273
跳转到指定楼层
1
发表于 2013-11-11 21:48:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 御之嵐 于 2013-11-12 21:51 编辑

RT

目前的成果是

主選單內
新增了一個選項
名為『新增的選單』



點入後
會跑出全螢幕大小的 視窗


用來顯示一些參數的資訊


但是加入了返回指令後
仍然辦法返回

=======================================

我的作法是

1.

Window_MenuCommand
新增一條
RUBY 代码复制
  1. add_command("新增的選單", :task,   main_commands_enabled)



2.
然後 新增一個 名為『Window_Task』的腳本
RUBY 代码复制
  1. class Window_Task < Window_Selectable
  2.  
  3.   #--------------------------------------------------------------------------
  4.   # ● 初始化對象
  5.   #--------------------------------------------------------------------------
  6.   def initialize
  7.     super(0, 0, Graphics.width, Graphics.height)
  8.   end


3.
在Scene_Menu
插入
RUBY 代码复制
  1. @command_window.set_handler(:task,      method(:command_task))



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


進的去
出不來

這該怎麼解決?

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
22069
在线时间
9455 小时
注册时间
2012-6-19
帖子
7123

开拓者短篇九导演组冠军

2
发表于 2013-11-11 23:40:49 | 只看该作者
没有改scene_menu?
你是怎么进去的……?

点评

漏了,已補上  发表于 2013-11-12 14:13
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
100
在线时间
211 小时
注册时间
2011-8-16
帖子
300
3
发表于 2013-11-11 23:47:03 | 只看该作者
没有来获取玩家的退出指令的代码

评分

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

查看全部评分

RPGMaker 脚本/学习交流群:143356012
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3371
在线时间
665 小时
注册时间
2009-1-21
帖子
273
4
 楼主| 发表于 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
東砍西砍 誤打誤撞的結果
不知道有沒有比較漂亮的寫法?   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
100
在线时间
211 小时
注册时间
2011-8-16
帖子
300
5
发表于 2013-11-12 14:31:16 | 只看该作者
御之嵐 发表于 2013-11-12 14:21
昨天也有測試出來了
只是不太肯定是不是那個的關係  所以就跑來問問了

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

点评

恩 了解  发表于 2013-11-12 21:14
RPGMaker 脚本/学习交流群:143356012
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
22069
在线时间
9455 小时
注册时间
2012-6-19
帖子
7123

开拓者短篇九导演组冠军

6
发表于 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 那個,我是在文章忘了說明吶 ( 艸).

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
22069
在线时间
9455 小时
注册时间
2012-6-19
帖子
7123

开拓者短篇九导演组冠军

7
发表于 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

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2025-7-18 16:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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