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

Project1

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

[已经解决] 【VX】RMVX 关于二级菜单 的 角色选择问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
211 小时
注册时间
2010-12-30
帖子
85
跳转到指定楼层
1
发表于 2011-12-11 11:06:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 yanglibin0409 于 2012-1-1 20:24 编辑

游戏需要二级菜单,希望把 人物选择 的那几个选项 放进二级菜单里(下面有网上搜到的二级菜单添加脚本,加上我自己修改{当然没达到效果了})###后面的注释是我自己加的。

想要的效果是 如下,把物品换成 一个二级菜单,然后出现 特技、状态等可以角色选择的菜单,如果按我下面那个脚本,当点击二级菜单的 特技出现 角色选择,但是再点击无效~~~
求帮助,多谢!!!!
  1. #--------------------------------------------------------------------------
  2.   # ● 生成命令窗口
  3.   #--------------------------------------------------------------------------
  4.   def create_command_window
  5.     s1 = Vocab::item
  6.     s2 = Vocab::skill
  7.     s3 = Vocab::equip
  8.     s4 = Vocab::status
  9.     s5 = Vocab::save
  10.     s6 = Vocab::game_end
  11.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  12.     @command_window.index = @menu_index
  13.     if $game_party.members.size == 0          # 如果队伍为空
  14.       @command_window.draw_item(0, false)     # 无效化物品选项
  15.       @command_window.draw_item(1, false)     # 无效化技能选项
  16.       @command_window.draw_item(2, false)     # 无效化装备选项
  17.       @command_window.draw_item(3, false)     # 无效化状态选项
  18.     end
  19.     if $game_system.save_disabled             # 如果禁止存档
  20.       @command_window.draw_item(4, false)     # 无效化存档选项
  21.     end
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 更新命令窗口
  25.   #--------------------------------------------------------------------------
  26.   def update_command_selection
  27.     if Input.trigger?(Input::B)
  28.       Sound.play_cancel
  29.       $scene = Scene_Map.new
  30.     elsif Input.trigger?(Input::C)
  31.       if $game_party.members.size == 0 and @command_window.index < 4
  32.         Sound.play_buzzer
  33.         return
  34.       elsif $game_system.save_disabled and @command_window.index == 4
  35.         Sound.play_buzzer
  36.         return
  37.       end
  38.       Sound.play_decision
  39.       case @command_window.index
  40.       when 0     # 把物品的换了 ######################想在下面弄个二级菜单,
  41.                  #可以直接把 start_actor_selection 放入。
  42.         
  43.         fux = Window_Command.new(172,["1","2","3","4"])
  44.   fux.index = 0
  45.   fux.active = true
  46.   fux.x = 100
  47.   fux.y = 100
  48.   fux.z = 99999
  49.   fux2 = 0
  50.   loop do
  51.     Input.update
  52.     Graphics.update
  53.     fux.update
  54.   if Input.trigger?(Input::B)
  55.     fux.dispose
  56.     return
  57.   end
  58.     if Input.trigger?(Input::C)
  59.       fux2 = fux.index
  60.       break
  61.     end
  62.   end
  63.   fux.dispose
  64.   case fux2
  65.   when 0
  66.     p 1
  67.   when 1,2,3
  68.     start_actor_selection   #############在这里
  69.   end
  70.   return
  71.         
  72.       
  73.       when 1,2,3  # 技能、装备、状态
  74.         start_actor_selection
  75.       when 4      # 存档
  76.         $scene = Scene_File.new(true, false, false)
  77.       when 5      # 结束游戏
  78.         $scene = Scene_End.new
  79.       end
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 角色选择开始
  84.   #--------------------------------------------------------------------------
  85.   def start_actor_selection
  86.     @command_window.active = false
  87.     @status_window.active = true
  88.     if $game_party.last_actor_index < @status_window.item_max
  89.       @status_window.index = $game_party.last_actor_index
  90.     else
  91.       @status_window.index = 0
  92.     end
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 角色选择结束
  96.   #--------------------------------------------------------------------------
  97.   def end_actor_selection
  98.     @command_window.active = true
  99.     @status_window.active = false
  100.     @status_window.index = -1
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 角色选择更新
  104.   #--------------------------------------------------------------------------
  105.   def update_actor_selection
  106.     if Input.trigger?(Input::B)
  107.       Sound.play_cancel
  108.       end_actor_selection
  109.     elsif Input.trigger?(Input::C)
  110.       $game_party.last_actor_index = @status_window.index
  111.       Sound.play_decision
  112.       case @command_window.index
  113.       when 1  # 技能
  114.         $scene = Scene_Skill.new(@status_window.index)
  115.       when 2  # 装备
  116.         $scene = Scene_Equip.new(@status_window.index)
  117.       when 3  # 状态
  118.         $scene = Scene_Status.new(@status_window.index)
  119.       end
  120.     end
  121.   end
  122. end
复制代码

Lv2.观梦者

梦石
0
星屑
508
在线时间
1478 小时
注册时间
2011-9-17
帖子
1316

开拓者贵宾

2
发表于 2011-12-11 11:37:00 | 只看该作者
你注意一下update_actor_selection方法里面

case @command_window.index

实际上你用物品的二级菜单以后,@command_window.index是等于0的,因为你选的物品对应的index就是0……,
所以没有反应,

至于怎么改的话:注意你的 fux2 可以用它来索引,这样改:
(由于你懂脚本,我就不完全为你做了,你自己按照下面改吧~顺便学一下也好)

最开始的一步:
  1. #把fux2改为实例变量,即变为
  2. @fux2     #(手动修改60和65行)
复制代码
倘若不想影响1级菜单的选取,自然也不能直接将112行改为 case @fux2
那么想一下分歧吧:
@fux2有用的时候@command_window.index是等于0的……
所以来个嵌套吧~:
在112行下面加上,这么几个分支就够了(调试完了,记得把“1,2,3”改成文字吧)
  1. when 0
  2.         case @fux2
  3.         when 1  # 技能
  4.           $scene = Scene_Skill.new(@status_window.index)
  5.         when 2  # 装备
  6.           $scene = Scene_Equip.new(@status_window.index)
  7.         when 3  # 状态
  8.           $scene = Scene_Status.new(@status_window.index)
  9.         end
复制代码
当然你要是想直接废掉1级菜单中的技能什么的选项,112行直接改为
  1. case @fux2
复制代码
就可以了

怕你懒就贴出全脚本吧(以后发脚本,记得把所在类写出来哦,亲)
  1. class Scene_Menu
  2.   #--------------------------------------------------------------------------
  3.   # ● 生成命令窗口
  4.   #--------------------------------------------------------------------------
  5.   def create_command_window
  6.     s1 = Vocab::item
  7.     s2 = Vocab::skill
  8.     s3 = Vocab::equip
  9.     s4 = Vocab::status
  10.     s5 = Vocab::save
  11.     s6 = Vocab::game_end
  12.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  13.     @command_window.index = @menu_index
  14.     if $game_party.members.size == 0          # 如果队伍为空
  15.       @command_window.draw_item(0, false)     # 无效化物品选项
  16.       @command_window.draw_item(1, false)     # 无效化技能选项
  17.       @command_window.draw_item(2, false)     # 无效化装备选项
  18.       @command_window.draw_item(3, false)     # 无效化状态选项
  19.     end
  20.     if $game_system.save_disabled             # 如果禁止存档
  21.       @command_window.draw_item(4, false)     # 无效化存档选项
  22.     end
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 更新命令窗口
  26.   #--------------------------------------------------------------------------
  27.   def update_command_selection
  28.     if Input.trigger?(Input::B)
  29.       Sound.play_cancel
  30.       $scene = Scene_Map.new
  31.     elsif Input.trigger?(Input::C)
  32.       if $game_party.members.size == 0 and @command_window.index < 4
  33.         Sound.play_buzzer
  34.         return
  35.       elsif $game_system.save_disabled and @command_window.index == 4
  36.         Sound.play_buzzer
  37.         return
  38.       end
  39.       Sound.play_decision
  40.       case @command_window.index
  41.       when 0     # 把物品的换了 ######################想在下面弄个二级菜单,
  42.                  #可以直接把 start_actor_selection 放入。
  43.         
  44.         fux = Window_Command.new(172,["1","2","3","4"])
  45.   fux.index = 0
  46.   fux.active = true
  47.   fux.x = 100
  48.   fux.y = 100
  49.   fux.z = 99999
  50.   fux2 = 0
  51.   loop do
  52.     Input.update
  53.     Graphics.update
  54.     fux.update
  55.   if Input.trigger?(Input::B)
  56.     fux.dispose
  57.     return
  58.   end
  59.     if Input.trigger?(Input::C)
  60.       @fux2 = fux.index  #############在这里
  61.       break
  62.     end
  63.   end
  64.   fux.dispose
  65.   case @fux2   #############在这里
  66.   when 0
  67.     p 1
  68.   when 1,2,3
  69.     start_actor_selection   #############在这里
  70.   end
  71.   return
  72.       when 1,2,3  # 技能、装备、状态
  73.         start_actor_selection
  74.       when 4      # 存档
  75.         $scene = Scene_File.new(true, false, false)
  76.       when 5      # 结束游戏
  77.         $scene = Scene_End.new
  78.       end
  79.     end
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 角色选择开始
  83.   #--------------------------------------------------------------------------
  84.   def start_actor_selection
  85.     @command_window.active = false
  86.     @status_window.active = true
  87.     if $game_party.last_actor_index < @status_window.item_max
  88.       @status_window.index = $game_party.last_actor_index
  89.     else
  90.       @status_window.index = 0
  91.     end
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 角色选择结束
  95.   #--------------------------------------------------------------------------
  96.   def end_actor_selection
  97.     @command_window.active = true
  98.     @status_window.active = false
  99.     @status_window.index = -1
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 角色选择更新
  103.   #--------------------------------------------------------------------------
  104.   def update_actor_selection
  105.     if Input.trigger?(Input::B)
  106.       Sound.play_cancel
  107.       end_actor_selection
  108.     elsif Input.trigger?(Input::C)
  109.       $game_party.last_actor_index = @status_window.index
  110.       Sound.play_decision
  111.       case @command_window.index
  112.       when 0
  113.         case @fux2
  114.         when 1  # 技能
  115.           $scene = Scene_Skill.new(@status_window.index)
  116.         when 2  # 装备
  117.           $scene = Scene_Equip.new(@status_window.index)
  118.         when 3  # 状态
  119.           $scene = Scene_Status.new(@status_window.index)
  120.         end
  121.       when 1  # 技能
  122.         $scene = Scene_Skill.new(@status_window.index)
  123.       when 2  # 装备
  124.         $scene = Scene_Equip.new(@status_window.index)
  125.       when 3  # 状态
  126.         $scene = Scene_Status.new(@status_window.index)
  127.       end
  128.     end
  129.   end
  130. end
复制代码



我帖子中要有是不HX的空白,请Ctrl + A
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
211 小时
注册时间
2010-12-30
帖子
85
3
 楼主| 发表于 2011-12-12 09:38:10 | 只看该作者
iisnow 发表于 2011-12-11 11:37
你注意一下update_actor_selection方法里面

case @command_window.index

十分感谢, 问题基本解决了,但是又出现了个问题,
就是当二级菜单 点取消键的话,  选项按钮  又会回到原来的选项中。(表达不好,看下面吧)

如 物品(一级选项)
        装备1(二级1)
        特技1(二级2)
        状态1(二级3)
   装备2(一级)
   特技2(一级)
   状态2(一级)
当在装备1 点击取消的话,本来希望   选择按钮 回到物品
但是 却又回到 了 装备2

特技1 点取消回到了特技2

此外,如果改变原始的
s1 = Vocab::item
    s2 = Vocab::skill
    s3 = Vocab::equip
    s4 = Vocab::status
    s5 = Vocab::save
    s6 = Vocab::game_end
这些顺序,重新整顿菜单的话,也会出现上述情况。
比如把物品放在s4当在 新的s4点取消的话,选择项又会回到 s1

这个是如何设置的呢??
说实话,我不懂脚本,仅仅在参考 简单的修改中………………
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
508
在线时间
1478 小时
注册时间
2011-9-17
帖子
1316

开拓者贵宾

4
发表于 2011-12-12 10:43:11 | 只看该作者
本帖最后由 iisnow 于 2011-12-12 10:51 编辑
yanglibin0409 发表于 2011-12-12 09:38
十分感谢, 问题基本解决了,但是又出现了个问题,
就是当二级菜单 点取消键的话,  选项按钮  又会回到 ...

这个主要是修改  initialize  方法,
注意Scene_Equip、Scene_Skill、Scene_Status的
return_scene
方法,
调用Scene_Menu.new(X),X即是Menu打开时的默认选中项
目的是因为一级菜单返回的需要,所以在用二级打开菜单时,需要一个标识,
由于利用二级菜单打开其他窗口后,Scene_Menu会dispose,所以标识就用全局变量吧……

这样修改:
先添加一个全局变量开关$menu2,其实叫什么,无所谓
还记得那段脚本么?
  1. when 0
  2.         $menu2 = true     #加在这里!!,当然也可以加在别的地方,比如下面的一种方法,↓
  3.         case @fux2
  4.         when 1  # 技能
  5.           $scene = Scene_Skill.new(@status_window.index)
  6.         when 2  # 装备
  7.           $scene = Scene_Equip.new(@status_window.index)
  8.         when 3  # 状态
  9.           $scene = Scene_Status.new(@status_window.index)
  10.         end
复制代码
另一种方法,建立在Scene_Menu切换时需要dispose,那么会执行pre_terminate(当然还有terminate),
尽管它目前没有定义,那么我们这样定义吧:
  1.   def pre_terminate
  2.     $menu2 = @command_window.index == 0
  3.   end
复制代码
思想是,不管怎么样,用2级菜单打开时,@command_window.index永远是为0的
其实这样想的话,完全可以用$menu2赋值为数值,返回是给@nenu_index赋上就可以了,
但是我不是很想改变原来的架构啊(靠,都用了全局变量了,架构早就变了好不好)
不过最后还是给你写下来了

然后修改initialize方法
  1.   def initialize(menu_index = 0)
  2.       @menu_index = $menu2 ? 0 : menu_index  #这个式子应该懂吧……
  3.       $menu2 = false    #开关还原
  4.   end
复制代码
这样就没问题了
最后的代码:(在原基础上修改的哦~)
  1. class Scene_Menu

  2.   def initialize(menu_index = 0)
  3.     @menu_index = $menu2 ? 0 : menu_index
  4.     $menu2 = false
  5.   end

  6. def pre_terminate
  7.     $menu2 = @command_window.index == 0
  8.   end

  9. end
复制代码
或者用这种方式,这样initialize(menu_index = 0)中的参数就没有用了(这就是我所谓的架构变了):
  1. class Scene_Menu

  2.   def initialize(menu_index = 0)
  3.     @menu_index = $menu2 ? $menu2 : 0
  4.   end

  5.   def pre_terminate
  6.     $menu2 = $scene.is_a?(Scene_Map) ? 0 : @command_window.index
  7.    #倘若将这句改为$menu2 = @command_window.index
  8.    #则用菜单项记忆功能哦~~
  9. end

  10. end
复制代码
试试吧,另外脚本开始就是看帮助,慢慢的就会学会的
忘记最开始方法了:
  1.   class Scene_Menu

  2.     def initialize(menu_index = 0)
  3.       @menu_index = $menu2 ? 0 : menu_index
  4.       $menu = false
  5.     end
  6.    
  7.     def update_actor_selection
  8.       if Input.trigger?(Input::B)
  9.         Sound.play_cancel
  10.         end_actor_selection
  11.       elsif Input.trigger?(Input::C)
  12.         $game_party.last_actor_index = @status_window.index
  13.         Sound.play_decision
  14.         case @command_window.index
  15.         when 0
  16.           $menu2 = true
  17.           case @fux2
  18.           when 1  # 技能
  19.             $scene = Scene_Skill.new(@status_window.index)
  20.           when 2  # 装备
  21.             $scene = Scene_Equip.new(@status_window.index)
  22.           when 3  # 状态
  23.             $scene = Scene_Status.new(@status_window.index)
  24.           end
  25.         when 1  # 技能
  26.           $scene = Scene_Skill.new(@status_window.index)
  27.         when 2  # 装备
  28.           $scene = Scene_Equip.new(@status_window.index)
  29.         when 3  # 状态
  30.           $scene = Scene_Status.new(@status_window.index)
  31.         end
  32.       end
  33.     end
  34.    
  35.   end
  36.   
复制代码
(我不喜欢这个方法,因为显得不帅……)



点评

恩,搞定了~~~ 太谢谢啦~~ 奇怪 怎么认可答案选项 不见了??? - -  发表于 2011-12-12 20:53
格式乱了……  发表于 2011-12-12 10:44
我帖子中要有是不HX的空白,请Ctrl + A
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-30 03:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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