赞 | 0 |
VIP | 35 |
好人卡 | 0 |
积分 | 1 |
经验 | 96121 |
最后登录 | 2020-2-15 |
在线时间 | 22 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 22 小时
- 注册时间
- 2006-4-22
- 帖子
- 370
|
以下引用drgdrg于2008-8-7 21:08:17的发言:
<br><script language="javascript">
<!--
strCont="请问如何才能加上状态改变的动画,\r\n\r\n比如用个技能获得一种状态以后,身上显示 获得状态名称(要是能和数据库中定义的获得状态说明就更好了)\r\n\r\n状态消失以后身上显示 XXX消失\r\n\r\n这样要怎么改脚本?\r\n\r\n";
document.write(ubb.spbShowTopic(strCont,1));
//-->
</script>请问如何才能加上状态改变的动画,<br>
<br>
比如用个技能获得一种状态以后,身上显示 获得状态名称(要是能和数据库中定义的获得状态说明就更好了)<br>
<br>
状态消失以后身上显示 XXX消失<br>
<br>
这样要怎么改脚本?<br>
<br>
这个可以用显示伤害的方法来实现。。。。步骤如下:
在工程那个战斗脚本中找到class Game_Battler的
attr_accessor :slip_damage
attr_accessor :auto_damage
这几句下加上个
attr_accessor :state_name
然后在其下的def initialize下加上@state_name = nil这句。。。
接下来在脚本中找到class Scene_CP这个类,找到以下这个判断下的语句
if battler.cp_turn == battler.maxcp
battler.remove_states_auto unless battler.movable?
battler.slip_damage_effect
battler.do_auto_recovery if battler.is_a?(Game_Actor)
battler.damage_pop = true if battler.slip_damage != 0 or battler.auto_damage != 0
battler.cp_turn = 0
end
改为
if battler.cp_turn == battler.maxcp
#=================================
last_st = battler.states
#=================================
battler.remove_states_auto unless battler.movable?
battler.slip_damage_effect
battler.do_auto_recovery if battler.is_a?(Game_Actor)
#====================================
if battler.states != last_st
$scene.display_state_changes(battler)
end
#====================================
battler.damage_pop = true if battler.slip_damage != 0 or battler.auto_damage != 0
battler.cp_turn = 0
end
接下来在脚本中找到class Scene_Battle < Scene_Base 这个类,在当中添加以下这个方法,
#============================================
#★伤害变化显示
#============================================
def display_state_changes(target,obj = nil)
for state in target.added_states
if state.id == 1 # 不能战斗
target.perform_collapse
return
end
target.damage_pop = true if state != nil
target.state_name = state.name if state.id != 1 #战斗不能不显示
update_basic
end
for state in target.removed_states
target.damage_pop = true if state != nil
target.state_name = "解除" + state.name if state.id != 1 #复活时不显示
update_basic
end
end
最后在脚本中找到class Sprite_Battler < Sprite_Base这个类,找到这个语句段
if @battler.damage_pop and not (@battler.collapse or @battler.hidden)
if @battler.damage != nil
s_1 = @battler.damage > 0 ? 0 : 1
@battler.damage = @battler.damage > 0 ? [email protected] : @battler.damage
end
damage(@battler.damage,@battler.critical,s_1) if @battler.damage != 0 and @battler.damage != nil
damage(@battler.hp_damage,@battler.critical,0) if @battler.hp_damage != 0
damage(@battler.mp_damage,@battler.critical,1) if @battler.mp_damage != 0
damage("失误",@battler.critical) if @battler.missed
damage("MISS",@battler.critical) if @battler.evaded
damage(@battler.slip_damage - @battler.auto_damage,@battler.critical) if @battler.slip_damage != 0 or @battler.auto_damage != 0
@battler.slip_damage = 0
@battler.auto_damage = 0
@battler.damage = nil
@battler.damage_pop = false
end
改为
if @battler.damage_pop and not (@battler.collapse or @battler.hidden)
if @battler.damage != nil
s_1 = @battler.damage > 0 ? 0 : 1
@battler.damage = @battler.damage > 0 ? [email protected] : @battler.damage
end
damage(@battler.damage,@battler.critical,s_1) if @battler.damage != 0 and @battler.damage != nil
damage(@battler.hp_damage,@battler.critical,0) if @battler.hp_damage != 0
damage(@battler.mp_damage,@battler.critical,1) if @battler.mp_damage != 0
damage("失误",@battler.critical) if @battler.missed
damage("MISS",@battler.critical) if @battler.evaded
damage(@battler.slip_damage - @battler.auto_damage,@battler.critical) if @battler.slip_damage != 0 or @battler.auto_damage != 0
#================================
damage(@battler.state_name, @battler.critical) if @battler.state_name != nil
@battler.state_name = nil
#================================
@battler.slip_damage = 0
@battler.auto_damage = 0
@battler.damage = nil
@battler.damage_pop = false
end
大概就搞定了。。。。 |
|