本帖最后由 灯笼菜刀王 于 2019-10-4 19:41 编辑 直接给你栗子吧 首先你顾虑到用公共事件去做逃跑判断太麻烦, 那只要改造下之前屏蔽的这个 #-------------------------------------------------------------------------- # ● 画面更新 (同伴指令回合 : 逃跑) #-------------------------------------------------------------------------- def update_phase2_escape # 计算敌人速度的平均值 enemies_agi = 0 enemies_number = 0 for enemy in $game_troop.enemies if enemy.exist? enemies_agi += enemy.agi enemies_number += 1 end end if enemies_number > 0 enemies_agi /= enemies_number end # 计算角色速度的平均值 actors_agi = 0 actors_number = 0 for actor in $game_party.actors if actor.exist? actors_agi += actor.agi actors_number += 1 end end if actors_number > 0 actors_agi /= actors_number end # 逃跑成功判定 success = rand(100) < 50 * actors_agi / enemies_agi # 成功逃跑的情况下 if success # 演奏逃跑 SE $game_system.se_play($data_system.escape_se) # 还原为战斗开始前的 BGM $game_system.bgm_play($game_temp.map_bgm) # 战斗结束 battle_end(1) # 逃跑失败的情况下 else # 清除全体同伴的行动 $game_party.clear_actions # 开始主回合 start_phase4 end end 红色的这段全不要, 因为这段就是处理计算后的结果了, 我们拿到公共事件里处理 ,改造后的脚本是这样 #-------------------------------------------------------------------------- # ● 画面更新 (同伴指令回合 : 逃跑) #-------------------------------------------------------------------------- def update_phase2_escape # 计算敌人速度的平均值 enemies_agi = 0 enemies_number = 0 for enemy in $game_troop.enemies if enemy.exist? enemies_agi += enemy.agi enemies_number += 1 end end if enemies_number > 0 enemies_agi /= enemies_number end # 计算角色速度的平均值 actors_agi = 0 actors_number = 0 for actor in $game_party.actors if actor.exist? actors_agi += actor.agi actors_number += 1 end end if actors_number > 0 actors_agi /= actors_number end # 逃跑成功判定 return (rand(100) < 50 * actors_agi / enemies_agi) #让这段函数返回计算后的结果 end 然后公共事件里这样设置 |
本帖最后由 灯笼菜刀王 于 2019-10-4 15:42 编辑 #-------------------------------------------------------------------------- # ● 刷新画面 (同伴命令回合) #-------------------------------------------------------------------------- def update_phase2 # 按下 C 键的情况下 if Input.trigger?(Input::C) # 同伴指令窗口光标位置分支 case @party_command_window.index when 0 # 战斗 # 演奏确定 SE $game_system.se_play($data_system.decision_se) # 开始角色的命令回合 start_phase3 when 1 # 逃跑 # 不能逃跑的情况下 if $game_temp.battle_can_escape == false # 演奏冻结 SE $game_system.se_play($data_system.buzzer_se) return end # 演奏确定 SE $game_system.se_play($data_system.decision_se) # 逃走处理 #update_phase2_escape common_event = $data_common_events[10086] $game_system.battle_interpreter.setup(common_event.list, 0) # 清除全体同伴的行动 $game_party.clear_actions # 开始主回合 start_phase4 end return end end |
本帖最后由 灯笼菜刀王 于 2019-10-4 09:56 编辑 miantouchi 发表于 2019-10-4 09:36 1, 当然可以, 选择逃跑后直接启动一个公共事件, 然后公共事件里全员播放逃跑动画, 顺便处理逃跑几率,成功失败等即可 2, 我是说"XP默认的战斗脚本里, 只有敌人有逃跑这个basic的赋值", 原因已经说了, 角色你选择逃跑的时候是直接处理的, 不是像攻击防御一样通过给角色赋值basic 走流程, 所以默认的情况下角色永远不会有 basic == 2 这个行为(除非强制行动,然而逃跑的处理限定了敌人, 所以角色不会有任何效果) 而敌人的逃跑是和攻击防御一样走流程的, 轮到它的时候才执行, 而且只影响它自己, 这就和你要的效果一致咯 你只要在逃跑处理上, 区分出角色来,然后按ID预约公共事件, 就可以做到每个人分别判断逃跑成功率和逃跑动作了, 甚至可以做到FF10的逃跑(自顾自跑, 只要跑掉一个人就不会被全灭) |
参与人数 2 | 星屑 +100 | 赞 +2 | 收起 理由 |
---|---|---|---|
guoxiaomi | + 100 | + 1 | 认可答案 |
miantouchi | + 1 | 认可答案 |
本帖最后由 灯笼菜刀王 于 2019-10-3 23:07 编辑 miantouchi 发表于 2019-10-3 22:39 因为只有敌人有"逃跑" 这个行为动作(Game_BattleAction), 角色的"逃跑" 是在步骤2处理的, 并不是"行为动作" 错误原因-------- 第一张图, 你在这里处理无效, 原因是执行这段的时候直接就结束战斗了(调用了battle_end), 所以在战斗中"预约"的公共事件不会执行 第二张图, 先不说条件限定了"敌人", 就说 @active_battler.current_action.basic == 2 , 在默认的设置下, 你角色也是无法达到的, 因为XP默认的"逃跑"选项并没有执行 @active_battler.current_action.basic = 2 的操作 正确做法-------------- 你要把敌人限定去掉, 并给角色"选择逃跑指令" 后, 让他的current_action.basic = 2 就可以和敌人一样进行"单独逃跑行为"了, 怎么做, 可以参考"防御" =============== 提醒: @active_battler 是当前行动者, 它包括了角色和敌人, 所以默认的逃跑处理才会加上"is_a?" 来区分处理, 如果你的角色和敌人要采用不同的处理方法, 记得也要加上 is_a? 判断 比如, 你上面的防御, 仅判断ID的话, 那敌人也是有"ID为1,2,3,4"的情况哦 |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-11-23 13:18
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.