Project1
标题:
如何在MISS时稍微移动战斗图?
[打印本页]
作者:
连城究
时间:
2010-9-6 16:41
提示:
作者被禁止或删除 内容自动屏蔽
作者:
后知后觉
时间:
2010-9-6 19:43
大概的做了一下...
class Game_Battler
attr_accessor :add_x
alias hzhj_old_ini initialize
def initialize
hzhj_old_ini
@add_x = 0
end
end
class Sprite_Battler < RPG::Sprite
MoveSpeed = 8
alias hzhj_old_initialize initialize
def initialize(viewport, battler = nil)
hzhj_old_initialize(viewport, battler)
if not @battler.nil?
self.x = @battler.screen_x
end
@hzhj_x = self.x
end
def battler=(value)
if @battler != value and value != nil
self.x = value.screen_x
end
@hzhj_x = self.x
@battler = value
end
alias hzhj_old_update update
def update
hzhj_old_update
self.x = @hzhj_x
if not @battler.nil? and not @battler.dead?
if self.x < @battler.screen_x + @battler.add_x
self.x = [self.x + MoveSpeed, @battler.screen_x + @battler.add_x].min
elsif self.x > @battler.screen_x + @battler.add_x
self.x = [self.x - MoveSpeed, @battler.screen_x + @battler.add_x].max
end
end
@hzhj_x = self.x
end
def x
if @effect_hzhj
if @battler.nil?
return super
else
return @battler.screen_x
end
else
return super
end
end
def update_animation
@effect_hzhj = true
super
@effect_hzhj = false
end
def animation(*args)
@effect_hzhj = true
super(*args)
@effect_hzhj = false
end
def update_damage
@effect_hzhj = true
super
@effect_hzhj = false
end
def damage(*args)
@effect_hzhj = true
super(*args)
@effect_hzhj = false
end
end
class Scene_Battle
alias hzhj_old_update_phase4_step4 update_phase4_step4
def update_phase4_step4
hzhj_old_update_phase4_step4
for target in @target_battlers
next if target.dead?
next if target.damage != "Miss"
if target.is_a?(Game_Actor)
target.add_x = -64
elsif target.is_a?(Game_Enemy)
target.add_x = 64
end
end
end
alias hzhj_old_update_phase4_step5 update_phase4_step5
def update_phase4_step5
hzhj_old_update_phase4_step5
for target in @target_battlers
target.add_x = 0
end
end
end
复制代码
作者:
连城究
时间:
2010-9-6 20:18
提示:
作者被禁止或删除 内容自动屏蔽
作者:
后知后觉
时间:
2010-9-6 22:42
嗯的
先给每个战斗者增加了一个 @add_x 的实例变量
然后 给 Sprite_Batttler 的实例对象 增加了一个 @hzhj_x 的实例变量
这个 @hzhj_x 是用来修正 x 坐标的
因为在旧的 update 方法的末尾处有这样的3行
self.x = @battler.screen_x
self.y = @battler.screen_y
self.z = @battler.screen_z
这会扰乱 我们增加进去的新的 update 内容
所以就用了这么一个实例变量来修正这个问题.
新增加的刷新内容是一个把图像一步一步移动的过程
所以在 初始化 initialize 的时候要先设置一下 图像的坐标
不然在战斗开始的情况下.
他会在你看得见的情况下从 0,0 这个点慢慢的移动到战斗者的战斗坐标.
那个重定义的 battler=(value) 也是用来解决这个问题.
重定义的 x update_animation animation damage update_damage
这些是来实现你说的 播放动画和显示伤害要在原来的位置
你先自己试试吧.实在不行的话我再帮你写..
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1