|
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
首先,之前提问过的【如何让一个状态能够覆盖被装备赋予的自动状态】
虽然成功得到了一串代码,然而这串代码却衍生了其他问题
[pre lang="ruby"]class Game_Battler
def states
s=@states.clone
for a in s
for i in $data_states[a].minus_state_set
s.delete(i) if s.include?(i)
end
end
return s
end
end
end[/pre]
1,这并非覆盖了装备赋予的状态,而是让装备赋予的状态不显示,但效果还在。关于这点,我其实想到了用事件解决的方法(虽然很复杂)
2,关于状态和显示动画不同步
首先,角色赋予了比坚盾更高一级的镜盾状态
之后,镜盾消失,变回坚盾,此时可以看到,状态动画已经切换回坚盾的状态动画了,然而状态栏里的名字依然还是镜盾,必须再次行动后,状态名才被改回来
关于这点,我也尝试自行解决
具体为在Window_BattleStatus加了检测状态变化并刷新
[fold=检测状态变化并刷新][pre lang="ruby"]#==============================================================================
# ■ Window_BattleStatus
#------------------------------------------------------------------------------
# 显示战斗画面同伴状态的窗口。
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super(0, 320, 640, 160)
self.contents = Bitmap.new(width - 32, height - 32)
@level_up_flags = [false, false, false, false]
# 记录初始状态,用于后续对比
@last_states = $game_party.actors.map { |actor| actor.states.clone }
refresh
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
super
end
#--------------------------------------------------------------------------
# ● 设置升级标志
# actor_index : 角色索引
#--------------------------------------------------------------------------
def level_up(actor_index)
@level_up_flags[actor_index] = true
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
actor = $game_party.actors
actor_x = i * 160 + 4
draw_actor_name(actor, actor_x, 0)
draw_actor_hp(actor, actor_x, 32, 120)
draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
else
draw_actor_state(actor, actor_x, 96)
end
end
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
super
# 检测状态变化并刷新
check_state_change
# 主界面的不透明度调整
if $game_temp.battle_main_phase
self.contents_opacity -= 4 if self.contents_opacity > 191
else
self.contents_opacity += 4 if self.contents_opacity < 255
end
end
#--------------------------------------------------------------------------
# ● 检测状态变化
#--------------------------------------------------------------------------
def check_state_change
# 获取当前所有角色的状态
current_states = $game_party.actors.map { |actor| actor.states.clone }
# 对比上一帧状态,不同则刷新
if @last_states != current_states
refresh
@last_states = current_states.clone
end
end
end[/pre]
[/fold]
结果发现,在角色使用技能并还在播放技能动画的的时候,状态便已经被附加上了
|
-
-
|