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

Project1

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

[已经解决] 【新手提问】关于菜单脚本里添加二级菜单后不消失的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2014-5-31
帖子
8
跳转到指定楼层
1
发表于 2015-2-19 18:08:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 RyanBern 于 2015-2-19 20:47 编辑

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Menu
  3. #------------------------------------------------------------------------------
  4. #  处理菜单画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_Menu
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #     menu_index : 命令光标的初期位置
  11.   #--------------------------------------------------------------------------
  12.   def initialize(menu_index = 0)
  13.     @menu_index = menu_index
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 主处理
  17.   #--------------------------------------------------------------------------
  18.   def main
  19.     # 生成命令窗口
  20.     s1 = "属性"
  21.     s2 = "魔法"
  22.     s3 = "物品"
  23.     s4 = "系统"
  24.     @command_window = Window_Command.new(100, [s1, s2, s3, s4])
  25.     @command_window.index = @menu_index
  26.     @command_window.x = 0
  27.     @command_window.y = 64
  28.     # 同伴人数为 0 的情况下
  29.     if $game_party.actors.size == 0
  30.       # 物品、特技、装备、状态无效化
  31.       @command_window.disable_item(0)
  32.       @command_window.disable_item(1)
  33.       @command_window.disable_item(2)
  34.       @command_window.disable_item(3)
  35.     end
  36.     # 禁止存档的情况下
  37.     if $game_system.save_disabled
  38.       # 存档无效
  39.       @command_window.disable_item(4)
  40.     end
  41.     # 生成金钱窗口
  42.     @gold_window = Window_Gold.new
  43.     @gold_window.x = 0
  44.     @gold_window.y = 0
  45.     # 生成属性二级菜单
  46.     m1 = "状态"
  47.     m2 = "穿戴"
  48.     @attribute_window = Window_Command.new(85, [m1, m2])
  49.     @attribute_window.index = 0
  50.     @attribute_window.x = 80
  51.     @attribute_window.y = 70
  52.     @attribute_window.visible = false
  53.     # 生成物品二级菜单
  54.     a1 = "使用"
  55.     a2 = "装备"
  56.     @items_window = Window_Command.new(85, [a1, a2])
  57.     @items_window.index = 0
  58.     @items_window.x = 80
  59.     @items_window.y = 100
  60.     @items_window.visible = false
  61.     # 生成系统二级菜单
  62.     h1 = "读入进度"
  63.     h2 = "储存进度"
  64.     h3 = "游戏设置"
  65.     h4 = "结束游戏"
  66.     @system_window = Window_Command.new(90, [h1, h2, h3, h4])
  67.     @system_window.index = 0
  68.     @system_window.x = 80
  69.     @system_window.y = 115
  70.     @system_window.visible = false
  71.     # 生成系统三级菜单
  72.     c1 = "音乐开"
  73.     c2 = "音乐关"
  74.     @system2_window = Window_Command.new(85, [c1, c2])
  75.     @system2_window.index = 0
  76.     @system2_window.x = 155
  77.     @system2_window.y = 175
  78.     @system2_window.visible = false
  79.     # 执行过渡
  80.     Graphics.transition
  81.     # 主循环
  82.     loop do
  83.       # 刷新游戏画面
  84.       Graphics.update
  85.       # 刷新输入信息
  86.       Input.update
  87.       # 刷新画面
  88.       update
  89.       # 如果切换画面就中断循环
  90.       if $scene != self
  91.         break
  92.       end
  93.     end
  94.     # 准备过渡
  95.     Graphics.freeze
  96.     # 释放窗口
  97.     @command_window.dispose
  98.     @gold_window.dispose
  99.     @attribute_window.dispose
  100.     @items_window.dispose
  101.     @system_window.dispose
  102.     @system2_window.dispose
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 刷新画面
  106.   #--------------------------------------------------------------------------
  107.   def update
  108.     # 刷新窗口
  109.     @command_window.update
  110.     @gold_window.update
  111.     @attribute_window.update
  112.     @items_window.update
  113.     @system_window.update
  114.     @system2_window.update
  115.     # 命令窗口被激活的情况下: 调用 update_command
  116.     if @command_window.active
  117.       update_command
  118.       return
  119.     end
  120.     # 属性窗口被激活的情况下: 调用 update_attribute
  121.     if @attribute_window.active
  122.       update_attribute
  123.       return
  124.     end
  125.      # 物品窗口被激活的情况下: 调用 update_items
  126.     if @items_window.active
  127.       update_items
  128.       return
  129.     end
  130.     # 系统窗口被激活的情况下: 调用 update_system
  131.     if @system_window.active
  132.       update_system
  133.       return
  134.     end
  135.     # 系统设置窗口被激活的情况下: 调用 update_system2
  136.     if @system2_window.active
  137.       update_system2
  138.       return
  139.     end
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 刷新画面 (命令窗口被激活的情况下)
  143.   #--------------------------------------------------------------------------
  144.   def update_command
  145.     # 按下 B 键的情况下
  146.     if Input.trigger?(Input::B)
  147.       # 演奏取消 SE
  148.       $game_system.se_play($data_system.cancel_se)
  149.       # 切换的地图画面
  150.       $scene = Scene_Map.new
  151.       return
  152.     end
  153.     # 按下 C 键的情况下
  154.     if Input.trigger?(Input::C)
  155.       # 同伴人数为 0、存档、游戏结束以外的场合
  156.       if $game_party.actors.size == 0 and @command_window.index < 4
  157.         # 演奏冻结 SE
  158.         $game_system.se_play($data_system.buzzer_se)
  159.         return
  160.       end
  161.       # 命令窗口的光标位置分支
  162.       case @command_window.index
  163.       when 0  # 属性
  164.         # 演奏确定 SE
  165.         $game_system.se_play($data_system.decision_se)
  166.         # 激活属性二级菜单
  167.         @attribute_window.visible = true
  168.         @command_window.active = false
  169.         @attribute_window.active = true
  170.         @attribute_window.index = 0
  171.       when 1  # 魔法
  172.         # 演奏确定 SE
  173.         $game_system.se_play($data_system.decision_se)
  174.         # 激活状态窗口
  175.         $scene = Scene_Skill.new(0)
  176.       when 2  # 物品
  177.         # 演奏确定 SE
  178.         $game_system.se_play($data_system.decision_se)
  179.         # 激活物品二级菜单
  180.         @items_window.visible = true
  181.         @command_window.active = false
  182.         @items_window.active = true
  183.         @items_window.index = 0
  184.       when 3  # 系统
  185.         # 演奏确定 SE
  186.         $game_system.se_play($data_system.decision_se)
  187.         # 激活系统二级菜单
  188.         @system_window.visible = true
  189.         @command_window.active = false
  190.         @system_window.active = true
  191.         @system_window.index = 0
  192.       end
  193.     end
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 刷新画面 (属性二级菜单被激活的情况下)
  197.   #--------------------------------------------------------------------------
  198.    def update_attribute
  199.     # 按下 B 键的情况下
  200.     if Input.trigger?(Input::B)
  201.       # 演奏取消 SE
  202.       $game_system.se_play($data_system.cancel_se)
  203.       # 上一层菜单
  204.       @command_window.active = true
  205.       @attribute_window.active = false
  206.       @attribute_window.visible = false
  207.       return
  208.     end
  209.      if Input.trigger?(Input::C)
  210.       # 命令窗口的光标位置分支
  211.       case @attribute_window.index
  212.       when 0  # 状态
  213.         # 演奏确定 SE
  214.         $game_system.se_play($data_system.decision_se)
  215.         # 切换到物品画面
  216.         $Scene = Scene_Status.new
  217.       when 1  # 穿戴
  218.         # 演奏确定 SE
  219.         $game_system.se_play($data_system.decision_se)
  220.         # 激活状态窗口
  221.       end
  222.     end
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● 刷新画面 (物品二级菜单被激活的情况下)
  226.   #--------------------------------------------------------------------------
  227.    def update_items
  228.     # 按下 B 键的情况下
  229.     if Input.trigger?(Input::B)
  230.       # 演奏取消 SE
  231.       $game_system.se_play($data_system.cancel_se)
  232.       # 上一层菜单
  233.       @command_window.active = true
  234.       @items_window.active = false
  235.       @items_window.visible = false
  236.     end
  237.      if Input.trigger?(Input::C)
  238.       # 命令窗口的光标位置分支
  239.       case @items_window.index
  240.       when 0  # 使用
  241.         # 演奏确定 SE
  242.         $game_system.se_play($data_system.decision_se)
  243.         # 切换到物品画面
  244.         $Scene = Scene_Status.new
  245.       when 1  # 装备
  246.         # 演奏确定 SE
  247.         $game_system.se_play($data_system.decision_se)
  248.         # 激活状态窗口
  249.       end
  250.     end
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● 刷新画面 (系统二级菜单被激活的情况下)
  254.   #--------------------------------------------------------------------------
  255.    def update_system
  256.     # 按下 B 键的情况下
  257.     if Input.trigger?(Input::B)
  258.       # 演奏取消 SE
  259.       $game_system.se_play($data_system.cancel_se)
  260.       # 上一层菜单
  261.       @command_window.active = true
  262.       @system_window.active = false
  263.       @system_window.visible = false
  264.     end
  265.      if Input.trigger?(Input::C)
  266.       # 命令窗口的光标位置分支
  267.       case @system_window.index
  268.       when 0  # 读入进度
  269.         # 演奏确定 SE
  270.         $game_system.se_play($data_system.decision_se)
  271.         # 切换到物品画面
  272.       when 1  # 储存进度
  273.         # 演奏确定 SE
  274.         $game_system.se_play($data_system.decision_se)
  275.         # 激活状态窗口
  276.       when 2  # 游戏设置
  277.         # 演奏确定 SE
  278.         $game_system.se_play($data_system.decision_se)
  279.         # 切换到物品画面
  280.         @system_window.active = false
  281.         @system2_window.active = true
  282.         @system2_window.visible = true
  283.       when 3  # 结束游戏
  284.         # 演奏确定 SE
  285.         $game_system.se_play($data_system.decision_se)
  286.       end
  287.     end
  288.   end
  289.     #--------------------------------------------------------------------------
  290.   # ● 刷新画面 (系统三级菜单被激活的情况下)
  291.   #--------------------------------------------------------------------------
  292.    def update_system2
  293.     # 按下 B 键的情况下
  294.     if Input.trigger?(Input::B)
  295.       # 演奏取消 SE
  296.       $game_system.se_play($data_system.cancel_se)
  297.       # 上一层菜单
  298.       @system_window.active = true
  299.       @system2_window.active = false
  300.       @system2_window.visible = false
  301.     end
  302.      if Input.trigger?(Input::C)
  303.       # 命令窗口的光标位置分支
  304.       case @system2_window.index
  305.       when 0  # 音乐开
  306.         # 演奏确定 SE
  307.         $game_system.se_play($data_system.decision_se)
  308.         # 切换到物品画面
  309.         $Scene = Scene_Status.new
  310.       when 1  # 音乐关
  311.         # 演奏确定 SE
  312.         $game_system.se_play($data_system.decision_se)
  313.         # 激活状态窗口
  314.         @command_window.active = false
  315.       end
  316.     end
  317.   end
  318. end

自己改的脚本就是以上,然后问题来了,和图片中一样,当第一次打开菜单时,属性选项很正常,但是物品选项和系统选项选择后出现了二级菜单,但是按B键不能使二级菜单消失,然后再按就挤在一起了,但是回到主菜单不回到地图的话再选择一次物品和系统,这两个就正常了,就能正常得选择和取消,但是如果回到地图以后再来按一次菜单,就又出现了问题无法取消,新手提问,感谢各位大神能够指出错误,小弟在这里谢谢了

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
2
发表于 2015-2-19 18:33:54 | 只看该作者
生成N级命令窗口的时候需要保证:active= false ,visible = false
你不仅要有
@attribute_window.visible = false 也要有
@attribute_window.active = false

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2014-5-31
帖子
8
3
 楼主| 发表于 2015-2-20 11:38:36 | 只看该作者
恐惧剑刃 发表于 2015-2-19 18:33
生成N级命令窗口的时候需要保证:active= false ,visible = false
你不仅要有
@attribute_window.visible  ...

可是我有了啊,第一个的二级菜单就没问题,只有第三和第四个才不正常
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2015-2-20 11:55:31 | 只看该作者
出现此问题的原因是一切Window_Selectable初始的active属性均为true,当第一次生成的时候,请务必将主菜单的active设置为true,其他各级菜单的active设置为false。否则会因为有多个窗口的active为true而引发刷新混乱。
解决方法很简单,只要在main方法里面生成窗口那里把各级菜单的active也设置为false即可。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2014-5-31
帖子
8
5
 楼主| 发表于 2015-2-20 13:08:16 | 只看该作者
RyanBern 发表于 2015-2-20 11:55
出现此问题的原因是一切Window_Selectable初始的active属性均为true,当第一次生成的时候,请务必将主菜单 ...

解决了谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-22 19:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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