#==============================================================================
# ■ Sprite_Battler
#------------------------------------------------------------------------------
# 战斗显示用活动块。Game_Battler 类的实例监视、
# 活动块的状态的监视。
#==============================================================================
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :battler # 战斗者
attr_accessor :select_index
#--------------------------------------------------------------------------
# ● 初始化对像
# viewport : 显示端口
# battler : 战斗者 (Game_Battler)
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
super(viewport)
[url=home.php?mod=space&uid=133701]@battler[/url] = battler
@battler_visible = false
@number = 0
@sprite_contens = Sprite.new#(viewport)
@sprite_contens.x = 0
@sprite_contens.y = 0
@sprite_contens.z = 0
@sprite_contens.bitmap = Bitmap.new(640,480)
@select_index = -1
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
if self.bitmap != nil
self.bitmap.dispose
end
if @sprite_contens.bitmap != nil
@sprite_contens.bitmap.dispose
end
super
end
#--------------------------------------------------------------------------
# ● 战斗中名字的描绘
#--------------------------------------------------------------------------
def draw_actor_name(actor, x, y)
@sprite_contens.bitmap.font.color = Color.new(0, 230, 50, 255)
@sprite_contens.bitmap.font.size = 16
@sprite_contens.bitmap.draw_text(x, y, 60, 65, actor.name,1)
@sprite_contens.z = 9
end
#--------------------------------------------------------------------------
# ● 战斗血条描绘
#--------------------------------------------------------------------------
def draw_battle_hp(actor, x, y)
# 底图描绘
battle_hp_bitmap = RPG::Cache.picture("战斗条框")
src_rect = Rect.new(0, 0, battle_hp_bitmap.width, battle_hp_bitmap.height)
@sprite_contens.bitmap.blt(x+12, y+41, battle_hp_bitmap, src_rect)
@sprite_contens.z = 999
# 血条显示
battle_hp_bitmap = RPG::Cache.picture("战斗血条")
hp_width = battle_hp_bitmap.width * actor.hp / actor.maxhp
src_rect = Rect.new(0, 0, hp_width, battle_hp_bitmap.height)
@sprite_contens.bitmap.blt(x+13, y+42, battle_hp_bitmap, src_rect)
@sprite_contens.z = 999
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
super
#刷新战斗血条
if @battler.is_a?(Game_Actor)
if not @sprite_contens.disposed?
if @battler_hp == 0 and not @battler.dead?
@sprite_contens.bitmap.clear
@sprite_contens.x = @battler.screen_x
@sprite_contens.y = @battler.screen_y
@sprite_contens.z = @battler.screen_z + 10
draw_actor_name(@battler, 0, 0)
#draw_battle_sp(@battler, 0, 27)
draw_battle_hp(@battler, 0, 0)
@battler_hp = @battler.hp
end
if @wait_count.to_i != 0
@sprite_contens.visible = false
else
@sprite_contens.visible = true
end
end
elsif @battler.is_a?(Game_Enemy)
unless @sprite_contens.disposed?
if @battler.hp0?
@sprite_contens.bitmap.clear
end
if @wait_count.to_i != 0
@sprite_contens.visible = false
else
@sprite_contens.visible = true
end
end
end
# 战斗者为 nil 的情况下
if @battler == nil
self.bitmap = nil
loop_animation(nil)
return
end
# 文件名和色相与当前情况有差异的情况下
if @battler.battler_name != @battler_name or
@battler.battler_hue != @battler_hue
# 获取、设置位图
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = bitmap.width
[url=home.php?mod=space&uid=291977]@height[/url] = bitmap.height
self.ox = @width / 2
self.oy = @height
# 如果是战斗不能或者是隐藏状态就把透明度设置成 0
if @battler.dead? or @battler.hidden
self.opacity = 0
end
end
if @battler.startactive == "移动" or @battler.startactive == "返回" or @battler.startactive == "挨打" or @battler.startactive == "防御" or @battler.startactive == "死亡"
if Graphics.frame_count % 2 == 0
unless BattlerName[@battler.file_name].nil?
@number = (@number + 1) % BattlerName[@battler.file_name][@battler.startactive].size
self.bitmap = RPG::Cache.battler(BattlerName[@battler.file_name][@battler.startactive][@number], @battler_hue)
#Graphics.update
end
end
else
if Graphics.frame_count % 3 == 0
unless BattlerName[@battler.file_name].nil?
@number = (@number + 1) % BattlerName[@battler.file_name][@battler.startactive].size
self.bitmap = RPG::Cache.battler(BattlerName[@battler.file_name][@battler.startactive][@number], @battler_hue)
end
end
end
if @a != 1
Mouse.set_bitmap("4.ani",[0,0,11,1])
@a = 1
end
x, y = Mouse.get_mouse_pos
if x >= self.x - self.ox and x <= self.x + self.ox and y >= self.y - self.oy and y <= self.y and
self.bitmap.get_pixel(x - self.x + self.ox + self.src_rect.x, y - self.y + self.oy + self.src_rect.y).alpha > 0
self.tone.set(80, 80, 80)
@sprite_contens.bitmap.font.color = Color.new(0,30, 50, 0)
if @battler.is_a?(Game_Enemy)
# 这里修改光标,攻击敌人的光标什么名i在?4
if $Battle_Skill_Select or $Battle_Item_Select
# Mouse.mouse_cursor("5.ani",[0,0,11,1])
else
# Mouse.mouse_cursor("4.ani",[0,0,11,1])
end
if Mouse.trigger?(0x01)
$select_index = @battler.index
end
else
if $Battle_Skill_Select or $Battle_Item_Select
# Mouse.mouse_cursor("5.ani",[0,0,11,1])
end
end
else
self.tone.set(0, 0, 0)
# 复原普通鼠标
# Mouse.mouse_cursor("mouse.ani",[0,0,11,1])
end
# 动画 ID 与当前的情况有差异的情况下
if @battler.damage == nil and #音乐咩。。。
@battler.state_animation_id != @state_animation_id
@state_animation_id = @battler.state_animation_id
loop_animation($data_animations[@state_animation_id])
end
# 不可见的情况下
unless @battler_visible
# 出现
if not @battler.hidden and not @battler.dead? and
(@battler.damage == nil or @battler.damage_pop)
appear
@battler_visible = true
end
end
# 可见的情况下
if @battler_visible
# 逃跑
if @battler.hidden
$game_system.se_play($data_system.escape_se)
escape
@battler_visible = false
end
# 白色闪烁
if @battler.white_flash
whiten
@battler.white_flash = false
end
# 动画
if @battler.animation_id != 0
animation = $data_animations[@battler.animation_id]
animation(animation, @battler.animation_hit)
@battler.animation_id = 0
end
#伤害
if @battler.damage_pop
if @battler.damage.is_a?(Numeric) and @battler.damage > 0
for i in 1..5
self.x += @battler.is_a?(Game_Actor) ? 8 : -8
self.y += @battler.is_a?(Game_Actor) ? 5 : -5
Graphics.update
end
for i in 1..5
self.x += @battler.is_a?(Game_Actor) ? -8 : 8
self.y += @battler.is_a?(Game_Actor) ? -5 : 5
Graphics.update
end
end
damage(@battler.damage, @battler.critical)
@battler.damage = nil
@battler.critical = false
@battler.damage_pop = false
end
# korapusu★★★★★★★★★★★★★★★★★★★★★★★★★★★★
if @battler.damage == nil and @battler.dead?
if @battler.is_a?(Game_Enemy)
$game_system.se_play($data_system.enemy_collapse_se)
@battler.startactive = "静态"
else
$game_system.se_play($data_system.actor_collapse_se)
@battler.startactive = "静态"
end
@battler_visible = false
end
end
# 设置活动块的坐标
self.x = @battler.screen_x
self.y = @battler.screen_y
self.z = @battler.screen_z
[url=home.php?mod=space&uid=287812]@mx[/url] = self.bitmap.height
if @battler.is_a?(Game_Actor)
@sprite_contens.bitmap.clear
@sprite_contens.x = @battler.screen_x - 30
@sprite_contens.y = @battler.screen_y - @mx - 20
@sprite_contens.z = self.z
draw_actor_name(@battler, 0,@mx)
draw_battle_hp(@battler, 0,0)
elsif @battler.is_a?(Game_Enemy)
@sprite_contens.bitmap.clear
@sprite_contens.x = @battler.screen_x - 30
@sprite_contens.y = @battler.screen_y - 20
draw_actor_name(@battler, 0, 0)
end
end
end