本帖最后由 guoxiaomi 于 2017-2-25 09:42 编辑
我大概知道问题出现在哪里了。
战斗中没有“并行处理”的事件
一个方法是直接修改 Scene_Battle#update方法。
class Scene_Battle alias _old_update update def update # 并行处理的代码 actor = $game_actors[1] if actor.hp <= 0.3 * actor.maxhp if $game_switches[1] == false $game_switches[1] = true actor.animation_id = 1 if actor.str >= 500 end else $game_switches[1] = false end # 继续更新 _old_update end end
class Scene_Battle
alias _old_update update
def update
# 并行处理的代码
actor = $game_actors[1]
if actor.hp <= 0.3 * actor.maxhp
if $game_switches[1] == false
$game_switches[1] = true
actor.animation_id = 1 if actor.str >= 500
end
else
$game_switches[1] = false
end
# 继续更新
_old_update
end
end
这里需要 1 个开关来判断血量。
如同上面的逻辑,开关 1 标志着角色 1 的血量是否低于30%,但只有开关 1 从 关闭 到 打开 时,才会设置角色1的动画为 1 号。
但是试一下,就知道,动画会在显示伤害数字前。这是因为RMXP的坑爹逻辑,在显示伤害数字前,角色的血量已经给扣了,只是没有刷新画面。
如何解决?
并行处理的代码,放在显示伤害数字之后。update_phase4_step6 是 Scene_Battle 4 的最后一个方法,很容易找到,在这里照着上面抄一段。
以后每次到达 phase4_step6,都会执行 2 号公共事件。
#-------------------------------------------------------------------------- # ● 刷新画面 (主回合步骤 6 : 刷新) #-------------------------------------------------------------------------- def update_phase4_step6 # 清除强制行动对像的战斗者 $game_temp.forcing_battler = nil # 公共事件 ID 有效的情况下 if @common_event_id > 0 # 设置事件 common_event = $data_common_events[@common_event_id] $game_system.battle_interpreter.setup(common_event.list, 0) end # 移至步骤 1 @phase4_step = 1 # 显示伤害结束后、物品技能公共事件结束后,再次执行 2 号公共事件 @common_event_id = 2 common_event = $data_common_events[@common_event_id] $game_system.battle_interpreter.setup(common_event.list, 0) end
#--------------------------------------------------------------------------
# ● 刷新画面 (主回合步骤 6 : 刷新)
#--------------------------------------------------------------------------
def update_phase4_step6
# 清除强制行动对像的战斗者
$game_temp.forcing_battler = nil
# 公共事件 ID 有效的情况下
if @common_event_id > 0
# 设置事件
common_event = $data_common_events[@common_event_id]
$game_system.battle_interpreter.setup(common_event.list, 0)
end
# 移至步骤 1
@phase4_step = 1
# 显示伤害结束后、物品技能公共事件结束后,再次执行 2 号公共事件
@common_event_id = 2
common_event = $data_common_events[@common_event_id]
$game_system.battle_interpreter.setup(common_event.list, 0)
end
2 号公共事件里把刚才的代码粘贴到事件脚本里。
actor = $game_actors[1] # 判断 1 号角色 if actor.hp <= 0.3 * actor.maxhp # 血量减少到 30 % 以下触发 if $game_switches[1] == false # 占用 1 号全局开关 $game_switches[1] = true actor.animation_id = 1 if actor.str >= 500# 对应角色力量大于 500,播放动画 ID 为 1 end else $game_switches[1] = false end
actor = $game_actors[1] # 判断 1 号角色
if actor.hp <= 0.3 * actor.maxhp # 血量减少到 30 % 以下触发
if $game_switches[1] == false # 占用 1 号全局开关
$game_switches[1] = true
actor.animation_id = 1 if actor.str >= 500# 对应角色力量大于 500,播放动画 ID 为 1
end
else
$game_switches[1] = false
end
可以照着这个多写一些。因为这里是公共事件,显示文章,图片什么的可以正常执行。
比如,在此脚本前令变量 1 为 0。
- $game_variables[1] = 0 # 角色 ID
复制代码
然后:
改成 :
- $game_variables[1] = 1 # 角色 ID
复制代码
然后在后面条件分歧变量1的值,为 1 的话,就对 1 号角色执行判断属性、显示动画等操作。如果有文字加强脚本,还可以显示对话框。
奇葩方案 |