Project1

标题: 【脚本】图标战斗选单问题 [打印本页]

作者: tree52    时间: 2010-8-24 11:56
标题: 【脚本】图标战斗选单问题
本帖最后由 tree52 于 2010-8-25 18:18 编辑


此贴因无人解答而关闭

  此贴子(原名为《【脚本】图标战斗选单与技能选项窗口光标会同时执行?!》)是跟着之前 http://rpg.blue/thread-154410-1-1.html 这里继续写下去的。
  测试中,按如下操作可以测试出bug,怎样才能避免二者同时进行呢?

■“击”>>>按方向“左”键>>>按ESC   可以发现光标随着走了 (不仅如此,其他如术、物等按钮一样);
继续...
■“术”>>>按方向“右”键,选择第二个单体技能>>>按方向“右”或者“左”按几次>>>按ESC取消>>>此时在按方向键    可以发现 图标 和 技能选择菜单 同时执行。

  
之前的游戏附件在:http://rpg.blue/thread-154410-1-1.html
  按那个帖子修复了之前的问题,用下面的DATA替换掉 Data.rar (2.54 MB, 下载次数: 42)

  问题可能出现在的脚本Scene_Battle3如下:


  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 3)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================
  6. #☆增加逃跑内容、解决战斗开始前选项为:【战斗】【逃跑】中“战斗”卡死情况。

  7. class Scene_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 开始角色命令回合
  10.   #--------------------------------------------------------------------------
  11.   def start_phase3
  12.     # 转移到回合 3
  13.     @phase = 3
  14.     # 设置觉得为非选择状态
  15.     @actor_index = -1
  16.     @active_battler = nil
  17.     # 输入下一个角色的命令
  18.     phase3_next_actor
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 转到输入下一个角色的命令
  22.   #--------------------------------------------------------------------------
  23.   def phase3_next_actor
  24.     # 循环
  25.     begin
  26.       # 角色的明灭效果 OFF
  27.       if @active_battler != nil
  28.         @active_battler.blink = false
  29.       end
  30.       # 最后的角色的情况
  31.       if @actor_index == $game_party.actors.size-1
  32.         # 开始主回合
  33.         start_phase4
  34.         return
  35.       end
  36.       # 推进角色索引
  37.       @actor_index += 1
  38.       @active_battler = $game_party.actors[@actor_index]
  39.       @active_battler.blink = true
  40.     # 如果角色是在无法接受指令的状态就再试
  41.     end until @active_battler.inputable?
  42.     # 设置角色的命令窗口
  43.     phase3_setup_command_window
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 转向前一个角色的命令输入
  47.   #--------------------------------------------------------------------------
  48.   def phase3_prior_actor
  49.     # 循环
  50.     begin
  51.       # 角色的明灭效果 OFF
  52.       if @active_battler != nil
  53.         @active_battler.blink = false
  54.       end
  55.       # 最初的角色的情况下
  56.       if @actor_index == 0
  57.         # 开始同伴指令回合
  58.         start_phase2
  59.         return
  60.       end
  61.       # 返回角色索引
  62.       @actor_index -= 1
  63.       @active_battler = $game_party.actors[@actor_index]
  64.       @active_battler.blink = true
  65.     # 如果角色是在无法接受指令的状态就再试
  66.     end until @active_battler.inputable?
  67.     # 设置角色的命令窗口
  68.     phase3_setup_command_window
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 设置角色指令窗口
  72.   #--------------------------------------------------------------------------
  73.   def phase3_setup_command_window
  74.     # 同伴指令窗口无效化
  75.     @party_command_window.active = false
  76.     @party_command_window.visible = false
  77.     # 角色指令窗口无效化
  78.     @actor_command_window.active = true
  79.     @actor_command_window.visible = true
  80.     # 设置角色指令窗口的位置
  81.     @actor_command_window.x = @actor_index * 160
  82.     @actor_command_window.y = 230 #
  83.     @actor_command_window.z = 9999 #
  84.     # 设置索引为 0
  85.     @actor_command_window.index = 0
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 刷新画面 (角色命令回合)
  89.   #--------------------------------------------------------------------------
  90.   def update_phase3
  91.     # 敌人光标有效的情况下
  92.     if @enemy_arrow != nil
  93.       update_phase3_enemy_select
  94.     # 角色光标有效的情况下
  95.     elsif @actor_arrow != nil
  96.       update_phase3_actor_select
  97.     # 特技窗口有效的情况下
  98.     elsif @skill_window != nil
  99.       update_phase3_skill_select
  100.     # 物品窗口有效的情况下
  101.     elsif @item_window != nil
  102.       update_phase3_item_select
  103.     # 角色指令窗口有效的情况下
  104.     elsif @actor_command_window.active
  105.       update_phase3_basic_command
  106.     end
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 刷新画面 (角色命令回合 : 基本命令)
  110.   #--------------------------------------------------------------------------
  111.   def update_phase3_basic_command
  112.     # 按下 B 键的情况下
  113.     if Input.trigger?(Input::B)
  114.       # 演奏取消 SE
  115.       $game_system.se_play($data_system.cancel_se)
  116.       # 转向前一个角色的指令输入
  117.       phase3_prior_actor
  118.       return
  119.     end
  120.     # 按下 C 键的情况下
  121.     if Input.trigger?(Input::C)
  122.       # 角色指令窗口光标位置分之
  123.       case @actor_command_window.index
  124.       when 0  # 攻击
  125.         # 演奏确定 SE
  126.         $game_system.se_play($data_system.decision_se)
  127.         # 设置行动
  128.         @active_battler.current_action.kind = 0
  129.         @active_battler.current_action.basic = 0
  130.         # 开始选择敌人
  131.         start_enemy_select
  132.       when 1  # 特技
  133.         # 演奏确定 SE
  134.         $game_system.se_play($data_system.decision_se)
  135.         # 设置行动
  136.         @active_battler.current_action.kind = 1
  137.         # 开始选择特技
  138.         start_skill_select
  139.       when 2  # 防御
  140.         # 演奏确定 SE
  141.         $game_system.se_play($data_system.decision_se)
  142.         # 设置行动
  143.         @active_battler.current_action.kind = 0
  144.         @active_battler.current_action.basic = 1
  145.         # 转向下一位角色的指令输入
  146.         phase3_next_actor
  147.       when 3  # 物品
  148.         # 演奏确定 SE
  149.         $game_system.se_play($data_system.decision_se)
  150.         # 设置行动
  151.         @active_battler.current_action.kind = 2
  152.         # 开始选择物品
  153.         start_item_select
  154.       when 4 #逃跑(☆增加内容)
  155.         # 不能逃跑的情况下
  156.         if $game_temp.battle_can_escape == false
  157.           # 演奏冻结 SE
  158.           $game_system.se_play($data_system.buzzer_se)
  159.           return
  160.         end
  161.         # 演奏确定 SE
  162.         $game_system.se_play($data_system.decision_se)
  163.         # 逃走处理
  164.         update_phase2_escape      
  165.       end
  166.       return
  167.     end
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 刷新画面 (角色命令回合 : 选择特技)
  171.   #--------------------------------------------------------------------------
  172.   def update_phase3_skill_select
  173.     # 设置特技窗口为可视状态
  174.     @skill_window.visible = true
  175.     # 刷新特技窗口
  176.     @skill_window.update
  177.     # 按下 B 键的情况下
  178.     if Input.trigger?(Input::B)
  179.       # 演奏取消 SE
  180.       $game_system.se_play($data_system.cancel_se)
  181.       # 结束特技选择
  182.       end_skill_select
  183.       return
  184.     end
  185.     # 按下 C 键的情况下
  186.     if Input.trigger?(Input::C)
  187.       # 获取特技选择窗口现在选择的特技的数据
  188.       @skill = @skill_window.skill
  189.       # 无法使用的情况下
  190.       if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
  191.         # 演奏冻结 SE
  192.         $game_system.se_play($data_system.buzzer_se)
  193.         return
  194.       end
  195.       # 演奏确定 SE
  196.       $game_system.se_play($data_system.decision_se)
  197.       # 设置行动
  198.       @active_battler.current_action.skill_id = @skill.id
  199.       # 设置特技窗口为不可见状态
  200.       @skill_window.visible = false
  201.       # 效果范围是敌单体的情况下
  202.       if @skill.scope == 1
  203.         # 开始选择敌人
  204.         start_enemy_select
  205.       # 效果范围是我方单体的情况下
  206.       elsif @skill.scope == 3 or @skill.scope == 5
  207.         # 开始选择角色
  208.         start_actor_select
  209.       # 效果范围不是单体的情况下
  210.       else
  211.         # 选择特技结束
  212.         end_skill_select
  213.         # 转到下一位角色的指令输入
  214.         phase3_next_actor
  215.       end
  216.       return
  217.     end
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 刷新画面 (角色命令回合 : 选择物品)
  221.   #--------------------------------------------------------------------------
  222.   def update_phase3_item_select
  223.     # 设置物品窗口为可视状态
  224.     @item_window.visible = true
  225.     # 刷新物品窗口
  226.     @item_window.update
  227.     # 按下 B 键的情况下
  228.     if Input.trigger?(Input::B)
  229.       # 演奏取消 SE
  230.       $game_system.se_play($data_system.cancel_se)
  231.       # 选择物品结束
  232.       end_item_select
  233.       return
  234.     end
  235.     # 按下 C 键的情况下
  236.     if Input.trigger?(Input::C)
  237.       # 获取物品窗口现在选择的物品资料
  238.       @item = @item_window.item
  239.       # 无法使用的情况下
  240.       unless $game_party.item_can_use?(@item.id)
  241.         # 演奏冻结 SE
  242.         $game_system.se_play($data_system.buzzer_se)
  243.         return
  244.       end
  245.       # 演奏确定 SE
  246.       $game_system.se_play($data_system.decision_se)
  247.       # 设置行动
  248.       @active_battler.current_action.item_id = @item.id
  249.       # 设置物品窗口为不可见状态
  250.       @item_window.visible = false
  251.       # 效果范围是敌单体的情况下
  252.       if @item.scope == 1
  253.         # 开始选择敌人
  254.         start_enemy_select
  255.       # 效果范围是我方单体的情况下
  256.       elsif @item.scope == 3 or @item.scope == 5
  257.         # 开始选择角色
  258.         start_actor_select
  259.       # 效果范围不是单体的情况下
  260.       else
  261.         # 物品选择结束
  262.         end_item_select
  263.         # 转到下一位角色的指令输入
  264.         phase3_next_actor
  265.       end
  266.       return
  267.     end
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 刷新画面画面 (角色命令回合 : 选择敌人)
  271.   #--------------------------------------------------------------------------
  272.   def update_phase3_enemy_select
  273.     # 刷新敌人箭头
  274.     @enemy_arrow.update
  275.     # 按下 B 键的情况下
  276.     if Input.trigger?(Input::B)
  277.       # 演奏取消 SE
  278.       $game_system.se_play($data_system.cancel_se)
  279.       # 选择敌人结束
  280.       end_enemy_select
  281.       return
  282.     end
  283.     # 按下 C 键的情况下
  284.     if Input.trigger?(Input::C)
  285.       # 演奏确定 SE
  286.       $game_system.se_play($data_system.decision_se)
  287.       # 设置行动
  288.       @active_battler.current_action.target_index = @enemy_arrow.index
  289.       # 选择敌人结束
  290.       end_enemy_select
  291.       # 显示特技窗口中的情况下
  292.       if @skill_window != nil
  293.         # 结束特技选择
  294.         end_skill_select
  295.       end
  296.       # 显示物品窗口的情况下
  297.       if @item_window != nil
  298.         # 结束物品选择
  299.         end_item_select
  300.       end
  301.       # 转到下一位角色的指令输入
  302.       phase3_next_actor
  303.     end
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● 画面更新 (角色指令回合 : 选择角色)
  307.   #--------------------------------------------------------------------------
  308.   def update_phase3_actor_select
  309.     # 刷新角色箭头
  310.     @actor_arrow.update
  311.     # 按下 B 键的情况下
  312.     if Input.trigger?(Input::B)
  313.       # 演奏取消 SE
  314.       $game_system.se_play($data_system.cancel_se)
  315.       # 选择角色结束
  316.       end_actor_select
  317.       return
  318.     end
  319.     # 按下 C 键的情况下
  320.     if Input.trigger?(Input::C)
  321.       # 演奏确定 SE
  322.       $game_system.se_play($data_system.decision_se)
  323.       # 设置行动
  324.       @active_battler.current_action.target_index = @actor_arrow.index
  325.       # 选择角色结束
  326.       end_actor_select
  327.       # 显示特技窗口中的情况下
  328.       if @skill_window != nil
  329.         # 结束特技选择
  330.         end_skill_select
  331.       end
  332.       # 显示物品窗口的情况下
  333.       if @item_window != nil
  334.         # 结束物品选择
  335.         end_item_select
  336.       end
  337.       # 转到下一位角色的指令输入
  338.       phase3_next_actor
  339.     end
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ● 开始选择敌人
  343.   #--------------------------------------------------------------------------
  344.   def start_enemy_select
  345.     # 生成敌人箭头
  346.     @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
  347.     # 关联帮助窗口
  348.     @enemy_arrow.help_window = @help_window
  349.     # 无效化角色指令窗口
  350.     @actor_command_window.active = false
  351.     @actor_command_window.visible = false
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ● 结束选择敌人
  355.   #--------------------------------------------------------------------------
  356.   def end_enemy_select
  357.     # 释放敌人箭头
  358.     @enemy_arrow.dispose
  359.     @enemy_arrow = nil
  360.     # 指令为 [战斗] 的情况下
  361. #    if @actor_command_window.index == 0  #注释
  362.       # 有效化角色指令窗口
  363.       @actor_command_window.active = true
  364.       @actor_command_window.visible = true
  365.       # 隐藏帮助窗口
  366.       @help_window.visible = false
  367.     end
  368. #  end
  369.   #--------------------------------------------------------------------------
  370.   # ● 开始选择角色
  371.   #--------------------------------------------------------------------------
  372.   def start_actor_select
  373.     # 生成角色箭头
  374.     @actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
  375.     @actor_arrow.index = @actor_index
  376.     # 关联帮助窗口
  377. #    @actor_arrow.help_window = @help_window #关闭帮助
  378.     # 无效化角色指令窗口
  379.     @actor_command_window.active = false
  380.     @actor_command_window.visible = false
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● 结束选择角色
  384.   #--------------------------------------------------------------------------
  385.   def end_actor_select
  386.     # 释放角色箭头
  387.     @actor_arrow.dispose
  388.     @actor_arrow = nil
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ● 开始选择特技
  392.   #--------------------------------------------------------------------------
  393.   def start_skill_select
  394.     # 生成特技窗口
  395.     @skill_window = Window_Skill.new(@active_battler)
  396.     @skill_window.z = 9999 #增加   
  397.     # 关联帮助窗口
  398.     @skill_window.help_window = @help_window
  399.     # 无效化角色指令窗口
  400.     @actor_command_window.active = false
  401.     @actor_command_window.visible = false
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ● 选择特技结束
  405.   #--------------------------------------------------------------------------
  406.   def end_skill_select
  407.     # 释放特技窗口
  408.     @skill_window.dispose
  409.     @skill_window = nil
  410.     # 隐藏帮助窗口
  411.     @help_window.visible = false
  412.     # 有效化角色指令窗口
  413.     @actor_command_window.active = true
  414.     @actor_command_window.visible = true
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ● 开始选择物品
  418.   #--------------------------------------------------------------------------
  419.   def start_item_select
  420.     # 生成物品窗口
  421.     @item_window = Window_Item.new
  422.     @item_window.z = 9999 #增加
  423.     # 关联帮助窗口
  424.     @item_window.help_window = @help_window
  425.     # 无效化角色指令窗口
  426.     @actor_command_window.active = false
  427.     @actor_command_window.visible = false
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ● 结束选择物品
  431.   #--------------------------------------------------------------------------
  432.   def end_item_select
  433.     # 释放物品窗口
  434.     @item_window.dispose
  435.     @item_window = nil
  436.     # 隐藏帮助窗口
  437.     @help_window.visible = false
  438.     # 有效化角色指令窗口
  439.     @actor_command_window.active = true
  440.     @actor_command_window.visible = true
  441.   end
  442. end
复制代码

作者: tree52    时间: 2010-8-24 15:41
3小时自顶。
作者: tree52    时间: 2010-8-24 18:56
本帖最后由 tree52 于 2010-8-24 19:30 编辑

  又是3小时,是我描述的不清楚还是怎么了? :'(
作者: tree52    时间: 2010-8-24 23:15
  4小时自顶一次,睡觉去了,明天继续等……坚持!
作者: tree52    时间: 2010-8-25 11:35
  自顶。能不能有人出来帮忙引个“线”……
作者: tree52    时间: 2010-8-25 14:52
来人哪……呜呜~~~~(>_<)~~~~  再不来我就结贴好了
作者: tree52    时间: 2010-8-25 18:18
3小时自顶,结贴。(悲剧=。=)




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1