class Damage < Sprite
def initialize(x, y, dealt_damage = 0, viewport = Viewport.new(0,0,640,480))
super(viewport)
@_damage_duration = 0
self.x = x
self.y = y
@damage = dealt_damage
damage(@damage)
end
def dispose
dispose_damage
super
end
def damage(value)
dispose_damage
if value.is_a?(Numeric)
damage_string = value.abs.to_s
else
damage_string = value.to_s
end
dispose_damage
if $fsize==nil
$fsize=0
end
bitmap = Bitmap.new(160, 48)
bitmap.font.name = "휴먼아미체"
bitmap.font.size = 20+$fsize
bitmap.font.color.set(0, 0, 0)
bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
if value.is_a?(Numeric) and value < 0
bitmap.font.color.set(176, 255, 144)
else
bitmap.font.color.set(255, 255, 255)
end
bitmap.draw_text(0, 12, 160, 36, damage_string, 1)#
@_damage_sprite = ::Sprite.new(self.viewport)
@_damage_sprite.bitmap = bitmap
@_damage_sprite.ox = 80
@_damage_sprite.oy = 20
@_damage_sprite.x = self.x
@_damage_sprite.y = self.y - self.oy / 2
@_damage_sprite.z = 9001
@_damage_duration = 20
end
def dispose_damage
if @_damage_sprite != nil
@_damage_sprite.bitmap.dispose
@_damage_sprite.dispose
@_damage_sprite = nil
@_damage_duration = 0
end
end
def update
super
if @_damage_duration > 0
@_damage_duration -= 1
case @_damage_duration
when 18..19
@_damage_sprite.y -= 4
$fsize=10
when 16..17
@_damage_sprite.y -= 2
$fsize=7
when 14..15
@_damage_sprite.y -= 2
$fsize=4
when 8..13
@_damage_sprite.y -= 2
$fsize=1
end
@_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
if @damage_duration == 0
dispose
end
end
end
end
class Scene_Map
alias trickster_update update
def update
if $damage != nil
if $damage.disposed?
$damage = nil
else
$damage.update
end
end
trickster_update
end
end
class Interpreter
def command_338
# Get operate value
value = operate_value(0, @parameters[2], @parameters[3])
# Process with iterator
iterate_battler(@parameters[0], @parameters[1]) do |battler|
# If battler exists
if battler.exist?
# Change HP
battler.hp -= value
# If in battle
if $game_temp.in_battle
# Set damage
battler.damage = value
battler.damage_pop = true
else
if battler.is_a?(Game_Actor)
x = $game_player.screen_x
y = $game_player.screen_y
else
x = battler.screen_x
y = battler.screen_y
end
viewport = Viewport.new(0,0,640,480)
damage = value
$damage = Damage.new(x,y,viewport,damage)
end
end
end
# Continue
return true
end
end
======================================================================
백호님께서 올려주신 데미지표시 스크립트이며 제가 처음 심플액알을 받았을 당시부터 같이 들어가 있었습니다.
문제는 이녀석이 평소에는 멀쩡하게 작동하다가 공격을 짧은 주기로 여러번 하게 되면 바보가 된다는 겁니다..
예를들어 공격을 한번 하면 x프레임동안 보인다음 사라진다고 가정했을 때,
한번 화면상에 출력 된 다음 x프레임이 지나기 전에 또다시 출력되면, 이전에 출력되던 녀석은 바로 멈춰버리고(사라지지도 않습니다.)
가장 최근에 출력된 데미지만 정상적으로 위로 올라가면서 사라집니다. . . . . ...............................
물론 @damage 이자식을 글로벌변수로 바꿔버릴수도 있겠지만,..... 위와같은 상황이 발생하였을 때,
이전에 출력되던 녀석들은 바로바로 날라가버리기때문에 눈으로 볼 수가 없습니다...
크.......... 너무 해매고있습니다. 어떻게 해야 할 지 정말 대첵이 안서는군요.. ㅍ....
헬프!! ㅠㅠ