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

Project1

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

[已经解决] 求帮助啊求帮助,自制的菜单出错了

[复制链接]

Lv1.梦旅人

小小的百鬼夜行<

梦石
0
星屑
54
在线时间
579 小时
注册时间
2010-7-29
帖子
2682

贵宾

跳转到指定楼层
1
发表于 2010-11-14 15:29:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 退屈£无聊 于 2010-11-14 17:01 编辑

自己制作的一个轩辕剑四的菜单。
现在有很多问题:
1、物品菜单进到选人使用时无用。。。。
2、装备菜单会有DISPOSE错误 (喵的。不dispose又不行)
3、状态菜单。。也是有DISPOSE错误。。。
注:参照天之痕菜单的话,求具体步骤。
以下是冗长的脚本。范例已贴上。 轩辕剑肆1.rar (1.74 MB, 下载次数: 61)
  1. #==============================================================================
  2. # ■ Scene_Menu
  3. #------------------------------------------------------------------------------
  4. #  处理菜单画面的类。
  5. #==============================================================================

  6. class Scene_Menu
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     menu_index : 命令光标的初期位置
  10.   #--------------------------------------------------------------------------
  11.   def initialize(menu_index = 0)
  12.     @choose1 = 0
  13.     @choose1 = menu_index
  14.     @equip1 = false
  15.     @statu1 = false
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 主处理
  19.   #--------------------------------------------------------------------------
  20.   def main
  21.     # ============ 菜单主体部分 ============== #
  22.     @oldindex = 0
  23.     @sprite = Sprite.new
  24.     @sprite.bitmap = Bitmap.new("Graphics/menu/0")
  25.     @choose = true
  26.     @item = Sprite.new
  27.     @item.bitmap = Bitmap.new("Graphics/menu/Item")
  28.     @equip = Sprite.new
  29.     @equip.bitmap = Bitmap.new("Graphics/menu/Equip")
  30.     @equip.y = 180
  31.     @skill = Sprite.new
  32.     @skill.bitmap = Bitmap.new("Graphics/menu/Skill")
  33.     @task = Sprite.new
  34.     @task.bitmap = Bitmap.new("Graphics/menu/Task")
  35.     @people = Sprite.new
  36.     @people.bitmap = Bitmap.new("Graphics/menu/People")
  37.     @sys = Sprite.new
  38.     @sys.bitmap = Bitmap.new("Graphics/menu/System")
  39.     @system = Window_Command.new(200, ["记录", "读取", "离开"])
  40.     @system.visible = false
  41.     @system.active = false
  42.     @system.y = 300
  43.     @system.x = 100
  44.     @item.y = 140
  45.     @skill.y = 220
  46.     @task.y = 260
  47.     @people.y = 300
  48.     @sys.y = 340
  49.     @item.x = 40
  50.     @equip.x= 5
  51.     @skill.x= 5
  52.     @task.x= 5
  53.     @people.x= 5
  54.     @sys.x= 5
  55.     # 生成金钱窗口
  56.     @gold_window = Window_Gold.new
  57.     @gold_window.x = 0
  58.     @gold_window.y = 0
  59.     # 生成状态窗口
  60.     @status_window = Window_MenuStatus.new
  61.     @status_window.x = 160
  62.     @status_window.y = 0
  63.     @status_window.opacity = 0
  64.     # ============ 物品
  65.     # 生成帮助窗口、物品窗口
  66.     @help_window = Window_Help.new
  67.     @help_window.visible = false
  68.     @item_window = Window_Item.new
  69.     @item_window.visible = false
  70.     @item_window.active = false
  71.     # 关联帮助窗口
  72.     @item_window.help_window = @help_window
  73.     # 生成目标窗口 (设置为不可见・不活动)
  74.     @target_window = Window_Target.new
  75.     @target_window.visible = false
  76.     @target_window.active = false
  77.     # 执行过渡
  78.     Graphics.transition
  79.     # 主循环
  80.     loop do
  81.       # 刷新游戏画面
  82.       Graphics.update
  83.       # 刷新输入信息
  84.       Input.update
  85.       # 刷新画面
  86.       update
  87.       # 如果切换画面就中断循环
  88.       if $scene != self
  89.         break
  90.       end
  91.     end
  92.     # 准备过渡
  93.     Graphics.freeze
  94.     # 释放窗口
  95.     @item.dispose
  96.     @equip.dispose
  97.     @skill.dispose
  98.     @task.dispose
  99.     @people.dispose
  100.     @sys.dispose
  101.     @sprite.dispose
  102.     @gold_window.dispose
  103.     @status_window.dispose
  104.     @help_window.dispose
  105.     @system.dispose
  106.     # 其它窗口
  107.     @item_window.dispose
  108.     @target_window.dispose
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 刷新画面
  112.   #--------------------------------------------------------------------------
  113.   def update
  114.     # 刷新窗口
  115.     @item.update
  116.     @equip.update
  117.     @skill.update
  118.     @task.update
  119.     @people.update
  120.     @sys.update
  121.     @gold_window.update
  122.     @item_window.update
  123.     @target_window.update
  124.     @help_window.update
  125.     @system.update
  126.     @sprite.update
  127.     @status_window.update
  128.     # 命令窗口被激活的情况下: 调用 update_command
  129.     if @choose == true
  130.       update_command
  131.       return
  132.     end
  133.     # 状态窗口被激活的情况下: 调用 update_status
  134.     if @status_window.active
  135.       update_status
  136.       return
  137.     end
  138.     if @item_window.active
  139.       update_items
  140.       return
  141.     end
  142.     if @skill_window != nil
  143.       update_skill
  144.       return
  145.     end
  146.     if @equip1 == true
  147.       #update_equip
  148.       #return
  149.       # 刷新窗口
  150.     @left_window.update
  151.     @right_window.update
  152.     @item_window.update
  153.     # 设置物品窗口的可视状态
  154.     @item_window1.visible = (@right_window.index == 0)
  155.     @item_window2.visible = (@right_window.index == 1)
  156.     @item_window3.visible = (@right_window.index == 2)
  157.     @item_window4.visible = (@right_window.index == 3)
  158.     @item_window5.visible = (@right_window.index == 4)
  159.     # 获取当前装备中的物品
  160.     item1 = @right_window.item
  161.     # 设置当前的物品窗口到 @item_window
  162.     case @right_window.index
  163.     when 0
  164.       @item_window = @item_window1
  165.     when 1
  166.       @item_window = @item_window2
  167.     when 2
  168.       @item_window = @item_window3
  169.     when 3
  170.       @item_window = @item_window4
  171.     when 4
  172.       @item_window = @item_window5
  173.     end
  174.     # 右窗口被激活的情况下
  175.     if @right_window.active
  176.       # 删除变更装备后的能力
  177.       @left_window.set_new_parameters(nil, nil, nil)
  178.     end
  179.     # 物品窗口被激活的情况下
  180.     if @item_window.active
  181.       # 获取现在选中的物品
  182.       item2 = @item_window.item
  183.       # 变更装备
  184.       last_hp = @actor.hp
  185.       last_sp = @actor.sp
  186.       @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)
  187.       # 获取变更装备后的能力值
  188.       new_atk = @actor.atk
  189.       new_pdef = @actor.pdef
  190.       new_mdef = @actor.mdef
  191.       # 返回到装备
  192.       @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
  193.       @actor.hp = last_hp
  194.       @actor.sp = last_sp
  195.       # 描画左窗口
  196.       @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
  197.     end
  198.     if @right_window.active
  199.       update_right
  200.       return
  201.     end
  202.     # 物品窗口被激活的情况下: 调用 update_item
  203.     if @item_window.active
  204.       update_left
  205.       return
  206.     end
  207.     end
  208.     if @statu1 == true
  209.       update_stat
  210.       return
  211.     end
  212.     if @system.active
  213.       update_sys
  214.       return
  215.     end
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 刷新画面 (命令窗口被激活的情况下)
  219.   #--------------------------------------------------------------------------
  220.   def update_command
  221.     # 按下 B 键的情况下
  222.     if Input.trigger?(Input::B)
  223.       # 演奏取消 SE
  224.       $game_system.se_play($data_system.cancel_se)
  225.       # 切换的地图画面
  226.       $scene = Scene_Map.new
  227.       return
  228.     end
  229.     if Input.trigger?(Input::UP)
  230.       if @choose1 == 0
  231.       else
  232.         @choose1 -= 1
  233.       end
  234.     end
  235.     if Input.trigger?(Input::DOWN)
  236.       if @choose1 == 5
  237.       else
  238.         @choose1 += 1
  239.       end
  240.     end
  241.     if @oldindex != @choose1
  242.       stah
  243.       @oldindex = @choose1
  244.     end
  245.     # 按下 C 键的情况下
  246.     if Input.trigger?(Input::C)
  247.       # 同伴人数为 0、存档、游戏结束以外的场合
  248.       if $game_party.actors.size == 0 #and @command_window.index < 4
  249.         # 演奏冻结 SE
  250.         $game_system.se_play($data_system.buzzer_se)
  251.         return
  252.       end
  253.       # 命令窗口的光标位置分支
  254.       case @choose1
  255.       when 0  # 物品
  256.         # 演奏确定 SE
  257.         $game_system.se_play($data_system.decision_se)
  258.         # 切换到物品画面
  259.         @item_window.visible = true
  260.         @item_window.active = true
  261.         @help_window.visible = true
  262.         @status_window.visible = false
  263.         @choose = false
  264.       when 2  # 特技
  265.         # 演奏确定 SE
  266.         $game_system.se_play($data_system.decision_se)
  267.         # 激活状态窗口
  268.         @choose = false
  269.         @status_window.active = true
  270.         @status_window.index = 0
  271.       when 1  # 装备
  272.         # 演奏确定 SE
  273.         $game_system.se_play($data_system.decision_se)
  274.         # 激活状态窗口
  275.         @choose = false
  276.         @status_window.active = true
  277.         @status_window.index = 0
  278.       when 4  # 状态
  279.         # 演奏确定 SE
  280.         $game_system.se_play($data_system.decision_se)
  281.         # 激活状态窗口
  282.         @choose = false
  283.         @status_window.active = true
  284.         @status_window.index = 0
  285.       when 5  # 存档
  286.         # 禁止存档的情况下
  287.         #if $game_system.save_disabled
  288.           # 演奏冻结 SE
  289.         #  $game_system.se_play($data_system.buzzer_se)
  290.         #  return
  291.         #end
  292.         # 演奏确定 SE
  293.         $game_system.se_play($data_system.decision_se)
  294.         @system.visible = true
  295.         @system.active = true
  296.         @choose = false
  297.         @system.index = 0
  298.         # 切换到存档画面
  299.         #$scene = Scene_Save.new
  300.       end
  301.       return
  302.     end
  303.   end
  304.   #======================= 刷新而已啦 ====================== #
  305.   def stah
  306.     @sprite.bitmap = Bitmap.new("Graphics/menu/" + @choose1.to_s)
  307.     case @choose1
  308.     when 0
  309.       if @oldindex == 1
  310.       loop do
  311.       @item.x += 5
  312.       @equip.x -= 5
  313.       Graphics.update
  314.       if @item.x >= 40
  315.         break
  316.       end
  317.     end
  318.     end
  319.     when 1
  320.       if @oldindex == 0
  321.       loop do
  322.       @equip.x += 5
  323.       @item.x -= 5
  324.       Graphics.update
  325.       if @equip.x >= 40
  326.         break
  327.         end
  328.       end
  329.     end
  330.      if @oldindex == 2
  331.       loop do
  332.       @equip.x += 5
  333.       @skill.x -= 5
  334.       Graphics.update
  335.       if @equip.x >= 40
  336.         break
  337.         end
  338.       end
  339.     end
  340.     when 2
  341.       if @oldindex == 1
  342.       loop do
  343.       @skill.x += 5
  344.       @equip.x -= 5
  345.       Graphics.update
  346.       if @skill.x >= 40
  347.         break
  348.       end
  349.     end
  350.   end
  351.   if @oldindex == 3
  352.       loop do
  353.       @skill.x += 5
  354.       @task.x -= 5
  355.       Graphics.update
  356.       if @skill.x >= 40
  357.         break
  358.       end
  359.     end
  360.     end
  361.     when 3
  362.       if @oldindex == 2
  363.       loop do
  364.       @task.x += 5
  365.       @skill.x -= 5
  366.       Graphics.update
  367.       if @task.x >= 40
  368.         break
  369.       end
  370.     end
  371.   end
  372.   if @oldindex == 4
  373.       loop do
  374.       @task.x += 5
  375.       @people.x -= 5
  376.       Graphics.update
  377.       if @task.x >= 40
  378.         break
  379.       end
  380.     end
  381.   end
  382.     when 4
  383.       if @oldindex == 3
  384.       loop do
  385.       @people.x += 5
  386.       @task.x -= 5
  387.       Graphics.update
  388.       if @people.x >= 40
  389.         break
  390.       end
  391.     end
  392.   end
  393.   if @oldindex == 5
  394.       loop do
  395.       @people.x += 5
  396.       @sys.x -= 5
  397.       Graphics.update
  398.       if @people.x >= 40
  399.         break
  400.       end
  401.     end
  402.     end
  403.     when 5
  404.       if @oldindex == 4
  405.       loop do
  406.       @sys.x += 5
  407.       @people.x -= 5
  408.       Graphics.update
  409.       if @sys.x >= 40
  410.         break
  411.       end
  412.     end
  413.   end
  414. end
  415. end
  416.   #--------------------------------------------------------------------------
  417.   # ● 刷新画面 (状态窗口被激活的情况下)
  418.   #--------------------------------------------------------------------------
  419.   def update_status
  420.     # 按下 B 键的情况下
  421.     if Input.trigger?(Input::B)
  422.       # 演奏取消 SE
  423.       $game_system.se_play($data_system.cancel_se)
  424.       # 激活命令窗口
  425.       @choose = true
  426.       @status_window.active = false
  427.       @status_window.index = -1
  428.       return
  429.     end
  430.     # 按下 C 键的情况下
  431.     if Input.trigger?(Input::C)
  432.       # 命令窗口的光标位置分支
  433.       case @choose1
  434.       when 2  # 特技
  435.         # 本角色的行动限制在 2 以上的情况下
  436.         if $game_party.actors[@status_window.index].restriction >= 2
  437.           # 演奏冻结 SE
  438.           $game_system.se_play($data_system.buzzer_se)
  439.           return
  440.         end
  441.         # 演奏确定 SE
  442.         $game_system.se_play($data_system.decision_se)
  443.         # 切换到特技画面
  444.         # ============= 技能
  445.         # 获取角色
  446.         @actor = $game_party.actors[@status_window.index]
  447.         # 生成帮助窗口、状态窗口、特技窗口
  448.         @statu_window = Window_SkillStatus.new(@actor)
  449.         @skill_window = Window_Skill.new(@actor)
  450.         # 关联帮助窗口
  451.         @skill_window.help_window = @help_window
  452.         @skill_window.visible = true
  453.         @statu_window.visible = true
  454.         @status_window.visible = false
  455.         @status_window.active = false
  456.         #@skill_window.dispose
  457.         #@statu_window.dispose
  458.       when 1  # 装备
  459.         # 演奏确定 SE
  460.         $game_system.se_play($data_system.decision_se)
  461.         # 切换的装备画面
  462.         # 获取角色
  463.     @actor = $game_party.actors[@status_window.index]
  464.     # 生成窗口
  465.     @left_window = Window_EquipLeft.new(@actor)
  466.     @right_window = Window_EquipRight.new(@actor)
  467.     @item_window1 = Window_EquipItem.new(@actor, 0)
  468.     @item_window2 = Window_EquipItem.new(@actor, 1)
  469.     @item_window3 = Window_EquipItem.new(@actor, 2)
  470.     @item_window4 = Window_EquipItem.new(@actor, 3)
  471.     @item_window5 = Window_EquipItem.new(@actor, 4)
  472.     # 关联帮助窗口
  473.     @right_window.help_window = @help_window
  474.     @item_window1.help_window = @help_window
  475.     @item_window2.help_window = @help_window
  476.     @item_window3.help_window = @help_window
  477.     @item_window4.help_window = @help_window
  478.     @item_window5.help_window = @help_window
  479.     @right_window.active = true
  480.     @equip1 = true
  481.     @status_window.active = false
  482.     @status_window.visible = false
  483.     # 设置光标位置
  484.     @right_window.index = 0
  485.       when 4  # 状态
  486.         # 演奏确定 SE
  487.         $game_system.se_play($data_system.decision_se)
  488.         # 切换到状态画面
  489.         @stat_window = Window_Status.new($game_party.actors[@status_window.index])
  490.         @status_window.visible = false
  491.         @status_window.active = false
  492.         @statu1 = true
  493.       end
  494.       return
  495.     end
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # stat
  499.   #--------------------------------------------------------------------------
  500.   def update_stat
  501.     @stat_window.update
  502.     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  503.       @stat_window.visible = false
  504.       #@choose = true
  505.       @statu1 = false
  506.       @status_window.dispose
  507.     end
  508.   end
  509.   #--------------------------------------------------------------------------
  510.   # 物品部分
  511.   #--------------------------------------------------------------------------
  512.   def update_items
  513.     # 物品窗口被激活的情况下: 调用 update_item
  514.     if @item_window.active
  515.       update_item1
  516.       return
  517.     end
  518.     # 目标窗口被激活的情况下: 调用 update_target
  519.     if @target_window.active
  520.       update_item2
  521.       return
  522.     end
  523.   end
  524.   def update_item1
  525.     # 按下 B 键的情况下
  526.     if Input.trigger?(Input::B)
  527.       # 演奏取消 SE
  528.       $game_system.se_play($data_system.cancel_se)
  529.       # 切换到菜单画面
  530.       @item_window.active = false
  531.       @target_window.active = false
  532.       @item_window.visible = false
  533.       @target_window.visible = false
  534.       @help_window.visible = false
  535.       @status_window.visible = true
  536.       @choose = true
  537.       return
  538.     end
  539.     # 按下 C 键的情况下
  540.     if Input.trigger?(Input::C)
  541.       # 获取物品窗口当前选中的物品数据
  542.       @itemm = @item_window.item
  543.       # 不使用物品的情况下
  544.       unless @itemm.is_a?(RPG::Item)
  545.         # 演奏冻结 SE
  546.         $game_system.se_play($data_system.buzzer_se)
  547.         return
  548.       end
  549.       # 不能使用的情况下
  550.       unless $game_party.item_can_use?(@itemm.id)
  551.         # 演奏冻结 SE
  552.         $game_system.se_play($data_system.buzzer_se)
  553.         return
  554.       end
  555.       # 演奏确定 SE
  556.       $game_system.se_play($data_system.decision_se)
  557.       # 效果范围是我方的情况下
  558.       if @itemm.scope >= 3
  559.         # 激活目标窗口
  560.         @item_window.active = false
  561.         @target_window.x = (@item_window.index + 1) % 2 * 304
  562.         @target_window.visible = true
  563.         @target_window.active = true
  564.         # 设置效果范围 (单体/全体) 的对应光标位置
  565.         if @itemm.scope == 4 || @itemm.scope == 6
  566.           @target_window.index = -1
  567.         else
  568.           @target_window.index = 0
  569.         end
  570.       # 效果在我方以外的情况下
  571.       else
  572.         # 公共事件 ID 有效的情况下
  573.         if @itemm.common_event_id > 0
  574.           # 预约调用公共事件
  575.           $game_temp.common_event_id = @itemm.common_event_id
  576.           # 演奏物品使用时的 SE
  577.           $game_system.se_play(@itemm.menu_se)
  578.           # 消耗品的情况下
  579.           if @itemm.consumable
  580.             # 使用的物品数减 1
  581.             $game_party.lose_item(@itemm.id, 1)
  582.             # 再描绘物品窗口的项目
  583.             @item_window.draw_item(@item_window.index)
  584.           end
  585.           # 切换到地图画面
  586.           $scene = Scene_Menu.new
  587.           return
  588.         end
  589.       end
  590.       return
  591.     end
  592.   def update_item2
  593.     # 按下 B 键的情况下
  594.     if Input.trigger?(Input::B)
  595.       # 演奏取消 SE
  596.       $game_system.se_play($data_system.cancel_se)
  597.       # 由于物品用完而不能使用的场合
  598.       unless $game_party.item_can_use?(@itemm.id)
  599.         # 再次生成物品窗口的内容
  600.         @item_window.refresh
  601.       end
  602.       # 删除目标窗口
  603.       @item_window.active = true
  604.       @target_window.visible = false
  605.       @target_window.active = false
  606.       return
  607.     end
  608.     # 按下 C 键的情况下
  609.     if Input.trigger?(Input::C)
  610.       # 如果物品用完的情况下
  611.       if $game_party.item_number(@itemm.id) == 0
  612.         # 演奏冻结 SE
  613.         $game_system.se_play($data_system.buzzer_se)
  614.         return
  615.       end
  616.       # 目标是全体的情况下
  617.       if @target_window.index == -1
  618.         # 对同伴全体应用物品使用效果
  619.         used = false
  620.         for i in $game_party.actors
  621.           used |= i.item_effect(@itemm)
  622.         end
  623.       end
  624.       # 目标是单体的情况下
  625.       if @target_window.index >= 0
  626.         # 对目标角色应用物品的使用效果
  627.         target = $game_party.actors[@target_window.index]
  628.         used = target.item_effect(@itemm)
  629.       end
  630.       # 使用物品的情况下
  631.       if used
  632.         # 演奏物品使用时的 SE
  633.         $game_system.se_play(@itemm.menu_se)
  634.         # 消耗品的情况下
  635.         if @itemm.consumable
  636.           # 使用的物品数减 1
  637.           $game_party.lose_item(@itemm.id, 1)
  638.           # 再描绘物品窗口的项目
  639.           @item_window.draw_item(@item_window.index)
  640.         end
  641.         # 再生成目标窗口的内容
  642.         @target_window.refresh
  643.         # 全灭的情况下
  644.         if $game_party.all_dead?
  645.           # 切换到游戏结束画面
  646.           $scene = Scene_Gameover.new
  647.           return
  648.         end
  649.         # 公共事件 ID 有效的情况下
  650.         if @itemm.common_event_id > 0
  651.           # 预约调用公共事件
  652.           $game_temp.common_event_id = @itemm.common_event_id
  653.           # 切换到地图画面
  654.           $scene = Scene_Map.new
  655.           return
  656.         end
  657.       end
  658.       # 无法使用物品的情况下
  659.       unless used
  660.         # 演奏冻结 SE
  661.         $game_system.se_play($data_system.buzzer_se)
  662.       end
  663.       return
  664.     end
  665.   end
  666. end
  667. # 技能部分
  668.   #--------------------------------------------------------------------------
  669.   # ● 刷新画面
  670.   #--------------------------------------------------------------------------
  671.   def update_skill
  672.     # 刷新窗口
  673.     @help_window.update
  674.     @statu_window.update
  675.     @skill_window.update
  676.     @target_window.update
  677.     # 特技窗口被激活的情况下: 调用 update_skill
  678.     if @skill_window.active
  679.       update_skill1
  680.       return
  681.     end
  682.     # 目标窗口被激活的情况下: 调用 update_target
  683.     if @target_window.active
  684.       update_skill2
  685.       return
  686.     end
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ● 刷新画面 (特技窗口被激活的情况下)
  690.   #--------------------------------------------------------------------------
  691.   def update_skill1
  692.     # 按下 B 键的情况下
  693.     if Input.trigger?(Input::B)
  694.       # 演奏取消 SE
  695.       $game_system.se_play($data_system.cancel_se)
  696.       # 切换到菜单画面
  697.       #@choose = false
  698.       @statu_window.visible = false
  699.       @skill_window.visible = false
  700.       @target_window.visible = false
  701.       @skill_window.active = false
  702.       @help_window.visible = false
  703.       @status_window.visible = true
  704.       @status_window.active = true
  705.       return
  706.     end
  707.     # 按下 C 键的情况下
  708.     if Input.trigger?(Input::C)
  709.       # 获取特技窗口现在选择的特技的数据
  710.       @skilll = @skill_window.skill
  711.       # 不能使用的情况下
  712.       if @skilll == nil or not @actor.skill_can_use?(@skilll.id)
  713.         # 演奏冻结 SE
  714.         $game_system.se_play($data_system.buzzer_se)
  715.         return
  716.       end
  717.       # 演奏确定 SE
  718.       $game_system.se_play($data_system.decision_se)
  719.       # 效果范围是我方的情况下
  720.       if @skilll.scope >= 3
  721.         # 激活目标窗口
  722.         @skill_window.active = false
  723.         @target_window.x = (@skill_window.index + 1) % 2 * 304
  724.         @target_window.visible = true
  725.         @target_window.active = true
  726.         # 设置效果范围 (单体/全体) 的对应光标位置
  727.         if @skilll.scope == 4 || @skilll.scope == 6
  728.           @target_window.index = -1
  729.         elsif @skilll.scope == 7
  730.           @target_window.index = @actor_index - 10
  731.         else
  732.           @target_window.index = 0
  733.         end
  734.       # 效果在我方以外的情况下
  735.       else
  736.         # 公共事件 ID 有效的情况下
  737.         if @skilll.common_event_id > 0
  738.           # 预约调用公共事件
  739.           $game_temp.common_event_id = @skilll.common_event_id
  740.           # 演奏特技使用时的 SE
  741.           $game_system.se_play(@skilll.menu_se)
  742.           # 消耗 SP
  743.           @actor.sp -= @skilll.sp_cost
  744.           # 再生成各窗口的内容
  745.           @status_window.refresh
  746.           @skill_window.refresh
  747.           @target_window.refresh
  748.           # 切换到地图画面
  749.           $scene = Scene_Map.new
  750.           return
  751.         end
  752.       end
  753.       return
  754.     end
  755.     # 按下 R 键的情况下
  756.     if Input.trigger?(Input::R)
  757.       # 演奏光标 SE
  758.       $game_system.se_play($data_system.cursor_se)
  759.       # 移至下一位角色
  760.       @actor_index += 1
  761.       @actor_index %= $game_party.actors.size
  762.       # 切换到别的特技画面
  763.       $scene = Scene_Skill.new(@actor_index)
  764.       return
  765.     end
  766.     # 按下 L 键的情况下
  767.     if Input.trigger?(Input::L)
  768.       # 演奏光标 SE
  769.       $game_system.se_play($data_system.cursor_se)
  770.       # 移至上一位角色
  771.       @actor_index += $game_party.actors.size - 1
  772.       @actor_index %= $game_party.actors.size
  773.       # 切换到别的特技画面
  774.       $scene = Scene_Skill.new(@actor_index)
  775.       return
  776.     end
  777.   end
  778.   #--------------------------------------------------------------------------
  779.   # ● 刷新画面 (目标窗口被激活的情况下)
  780.   #--------------------------------------------------------------------------
  781.   def update_skill2
  782.     # 按下 B 键的情况下
  783.     if Input.trigger?(Input::B)
  784.       # 演奏取消 SE
  785.       $game_system.se_play($data_system.cancel_se)
  786.       # 删除目标窗口
  787.       @skill_window.active = true
  788.       @target_window.visible = false
  789.       @target_window.active = false
  790.       return
  791.     end
  792.     # 按下 C 键的情况下
  793.     if Input.trigger?(Input::C)
  794.       # 因为 SP 不足而无法使用的情况下
  795.       unless @actor.skill_can_use?(@skilll.id)
  796.         # 演奏冻结 SE
  797.         $game_system.se_play($data_system.buzzer_se)
  798.         return
  799.       end
  800.       # 目标是全体的情况下
  801.       if @target_window.index == -1
  802.         # 对同伴全体应用特技使用效果
  803.         used = false
  804.         for i in $game_party.actors
  805.           used |= i.skill_effect(@actor, @skilll)
  806.         end
  807.       end
  808.       # 目标是使用者的情况下
  809.       if @target_window.index <= -2
  810.         # 对目标角色应用特技的使用效果
  811.         target = $game_party.actors[@target_window.index + 10]
  812.         used = target.skill_effect(@actor, @skilll)
  813.       end
  814.       # 目标是单体的情况下
  815.       if @target_window.index >= 0
  816.         # 对目标角色应用特技的使用效果
  817.         target = $game_party.actors[@target_window.index]
  818.         used = target.skill_effect(@actor, @skilll)
  819.       end
  820.       # 使用特技的情况下
  821.       if used
  822.         # 演奏特技使用时的 SE
  823.         $game_system.se_play(@skilll.menu_se)
  824.         # 消耗 SP
  825.         @actor.sp -= @skilll.sp_cost
  826.         # 再生成各窗口内容
  827.         @status_window.refresh
  828.         @skill_window.refresh
  829.         @target_window.refresh
  830.         # 全灭的情况下
  831.         if $game_party.all_dead?
  832.           # 切换到游戏结束画面
  833.           $scene = Scene_Gameover.new
  834.           return
  835.         end
  836.         # 公共事件 ID 有效的情况下
  837.         if @skilll.common_event_id > 0
  838.           # 预约调用公共事件
  839.           $game_temp.common_event_id = @skilll.common_event_id
  840.           # 切换到地图画面
  841.           $scene = Scene_Map.new
  842.           return
  843.         end
  844.       end
  845.       # 无法使用特技的情况下
  846.       unless used
  847.         # 演奏冻结 SE
  848.         $game_system.se_play($data_system.buzzer_se)
  849.       end
  850.       return
  851.     end
  852.   end
  853.   #================= 装备部分
  854.   #--------------------------------------------------------------------------
  855.   # ● 刷新画面
  856.   #--------------------------------------------------------------------------
  857. # def update_equip
  858.    
  859. # end
  860.   #--------------------------------------------------------------------------
  861.   # ● 刷新画面 (右侧窗口被激活的情况下)
  862.   #--------------------------------------------------------------------------
  863.   def update_right
  864.     # 按下 B 键的情况下
  865.     if Input.trigger?(Input::B)
  866.       # 演奏取消 SE
  867.       $game_system.se_play($data_system.cancel_se)
  868.       # 切换到菜单画面
  869.       @equip1 = false
  870.       @status_window.visible = true
  871.       @status_window.active = true
  872.       @help_window.visible = false
  873.       @right_window.visible = false
  874.       @left_window.visible = false
  875.       @right_window.dispose
  876.       @left_window.dispose
  877.       @item_window1.dispose
  878.       @item_window2.dispose
  879.       @item_window3.dispose
  880.       @item_window4.dispose
  881.       @item_window5.dispose
  882.     end
  883.     # 按下 C 键的情况下
  884.     if Input.trigger?(Input::C)
  885.       # 固定装备的情况下
  886.       if @actor.equip_fix?(@right_window.index)
  887.         # 演奏冻结 SE
  888.         $game_system.se_play($data_system.buzzer_se)
  889.         return
  890.       end
  891.       # 演奏确定 SE
  892.       $game_system.se_play($data_system.decision_se)
  893.       # 激活物品窗口
  894.       @right_window.active = false
  895.       @item_window.active = true
  896.       @item_window.index = 0
  897.       return
  898.     end
  899.     # 按下 R 键的情况下
  900.     if Input.trigger?(Input::R)
  901.       # 演奏光标 SE
  902.       $game_system.se_play($data_system.cursor_se)
  903.       # 移至下一位角色
  904.       @actor_index += 1
  905.       @actor_index %= $game_party.actors.size
  906.       # 切换到别的装备画面
  907.       $scene = Scene_Equip.new(@actor_index, @right_window.index)
  908.       return
  909.     end
  910.     # 按下 L 键的情况下
  911.     if Input.trigger?(Input::L)
  912.       # 演奏光标 SE
  913.       $game_system.se_play($data_system.cursor_se)
  914.       # 移至上一位角色
  915.       @actor_index += $game_party.actors.size - 1
  916.       @actor_index %= $game_party.actors.size
  917.       # 切换到别的装备画面
  918.       $scene = Scene_Equip.new(@actor_index, @right_window.index)
  919.       return
  920.     end
  921.   end
  922.   #--------------------------------------------------------------------------
  923.   # ● 刷新画面 (物品窗口被激活的情况下)
  924.   #--------------------------------------------------------------------------
  925.   def update_left
  926.     # 按下 B 键的情况下
  927.     if Input.trigger?(Input::B)
  928.       # 演奏取消 SE
  929.       $game_system.se_play($data_system.cancel_se)
  930.       # 激活右侧窗口
  931.       @right_window.active = true
  932.       @item_window.active = false
  933.       @item_window.index = -1
  934.       return
  935.     end
  936.     # 按下 C 键的情况下
  937.     if Input.trigger?(Input::C)
  938.       # 演奏装备 SE
  939.       $game_system.se_play($data_system.equip_se)
  940.       # 获取物品窗口现在选择的装备数据
  941.       item = @item_window.item
  942.       # 变更装备
  943.       @actor.equip(@right_window.index, item == nil ? 0 : item.id)
  944.       # 激活右侧窗口
  945.       @right_window.active = true
  946.       @item_window.active = false
  947.       @item_window.index = -1
  948.       # 再生成右侧窗口、物品窗口的内容
  949.       @right_window.refresh
  950.       @item_window.refresh
  951.       return
  952.     end
  953.   end
  954. #==========================================================================
  955. # SYS
  956. #==========================================================================
  957. def update_sys
  958.   # 按下 B 键的情况下
  959.   if Input.trigger?(Input::B)
  960.   # 演奏取消 SE
  961.     $game_system.se_play($data_system.cancel_se)
  962.     @system.active = false
  963.     @system.visible = false
  964.     @choose = true
  965.   end
  966.   if Input.trigger?(Input::C)
  967.     case @system.index
  968.     when 0
  969.       # 禁止存档的情况下
  970.         if $game_system.save_disabled
  971.           # 演奏冻结 SE
  972.           $game_system.se_play($data_system.buzzer_se)
  973.           return
  974.         end
  975.         # 演奏确定 SE
  976.         $game_system.se_play($data_system.decision_se)
  977.         $scene = Scene_Save.new
  978.     when 1
  979.        $game_system.se_play($data_system.decision_se)
  980.        $scene = Scene_Load.new(1)
  981.     when 2
  982.        $scene = Scene_End.new
  983.      end
  984.    end
  985. end
  986. end
复制代码
某只PHP/HTML小白鼠→退屈の间


Cause I knew you were trouble when you walked in
So shame is on me now
I flow me to place i ve never been
till you put me down oh
Now Im lying on the cold hard ground

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

2
发表于 2010-11-14 18:21:50 | 只看该作者
这是在 def update 里的一部分
    if @item_window.active
      update_items
      return
    end

这是在 def update_items 里的内容
  def update_items
    # 物品窗口被激活的情况下: 调用 update_item
    if @item_window.active
      update_item1
      return
    end
    # 目标窗口被激活的情况下: 调用 update_target
    if @target_window.active
      update_item2
      return
    end
  end
使用物品没有效果.是因为 update_item2 没有被执行
你自己看看上下2段是个什么样的关系.

至于退出的时候发生的 错误
是因为在按下B键的时候那些窗口就被dispose掉了
然后又调用了 update 所以报错了.
这些东西的dispose建议放在退出Scene_Menu的时候再dispose
要不就在那些 xxxx.update 后面都加上 if not disposed?

点评

膜拜~~  发表于 2010-11-14 20:22
前辈威武!  发表于 2010-11-14 19:54

评分

参与人数 1星屑 +376 收起 理由
fux2 + 376 认可答案

查看全部评分












你知道得太多了

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 12:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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