Project1
标题: 如何实现战斗中在血量下降到一定程度后跳出指定文字 [打印本页]
作者: letppigogo 时间: 2017-2-23 12:26
标题: 如何实现战斗中在血量下降到一定程度后跳出指定文字
本帖最后由 letppigogo 于 2017-2-23 23:02 编辑
如题,在战斗中角色血量下降到一定程度后在伤害数字跳完后,马上在该角色头上跳出指定文字,或者是图片什么的,也可以播放指定的动画。
作者: axicc 时间: 2017-2-23 15:06
可以在敌群
作者: letppigogo 时间: 2017-2-23 17:50
能具体的说一下吗?不是很明白
作者: letppigogo 时间: 2017-2-23 23:52
本帖最后由 letppigogo 于 2017-2-23 23:56 编辑
我想我知道你的意思了,在小怪的队伍里可以设置事件。但还是无法满足我的要求,因为我要跳出文字或者触发状态的条件不止只有血量,还和角色能力有关系。比如力量500以上的角色在血量低于30%会触发动画,或者弹出个类似"MISS"那样的其他文字。而力量500以下的就不会。同时力量500以上的在血量回复到30%以上后再次跌倒30%以下时该状态或者文字又会跳出。
类似于给能力高的角色包括敌人一个隐藏能力的触发提示。告诉玩家,该角色或者敌人已经触发了隐藏能力了。
作者: guoxiaomi 时间: 2017-2-24 01:23
敌人队伍里的事件有“即时触发”的选项,在这里面用条件分歧
作者: letppigogo 时间: 2017-2-24 08:14
本帖最后由 letppigogo 于 2017-2-24 10:09 编辑
事件我知道怎么做,因为我的角色能力会有变动,而且有很多角色,这样每个敌人队伍里都要建一堆事件,而且要大量的变量带入,这样太繁琐了。
就像图片里这样,经过实测战斗中无法触发动画,只能触发对话框,而且对话框不能重复触发。只能触发一次。
作者: letppigogo 时间: 2017-2-24 11:09
本帖最后由 letppigogo 于 2017-2-24 11:52 编辑
不能在脚本里增加一段代码吗?还有就是刚刚实测了一下,没法制定角色显示动画。只能按照顺位, 而我的游戏中队列顺位是可以随意调整的,这样角色显示动画无法实现。
作者: guoxiaomi 时间: 2017-2-25 00:49
本帖最后由 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 号角色执行判断属性、显示动画等操作。如果有文字加强脚本,还可以显示对话框。
奇葩方案
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |