| 
 
| 赞 | 0 |  
| VIP | 186 |  
| 好人卡 | 0 |  
| 积分 | 1 |  
| 经验 | 5829 |  
| 最后登录 | 2012-12-21 |  
| 在线时间 | 83 小时 |  
 Lv1.梦旅人 龙皇
	梦石0 星屑50 在线时间83 小时注册时间2007-8-8帖子2956 | 
| $aaa=1時才控制此 
 module RPG################控制此#####################
 class Sprite < ::Sprite
 def initialize(viewport = nil)
 super(viewport)
 @_whiten_duration = 0
 @_appear_duration = 0
 @_escape_duration = 0
 @_collapse_duration = 0
 @_damage = []
 @_animation = []
 @_animation_duration = 0
 @_blink = false
 end
 def damage(value, critical, type = 0)
 if value.is_a?(Numeric)
 damage_string = value.abs.to_s
 else
 damage_string = value.to_s
 end
 bitmap = Bitmap.new(160, 48)
 bitmap.font.name = "Arial Black"
 bitmap.font.size = 32
 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
 if type == 0
 bitmap.font.color.set(176, 255, 144)
 else
 bitmap.font.color.set(176, 144, 255)
 end
 else
 if type == 0
 bitmap.font.color.set(255, 255, 255)
 else
 bitmap.font.color.set(255, 176, 144)
 end
 end
 if type == 2
 bitmap.font.color.set(255, 224, 128)
 end
 bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
 if critical
 string = "CRITICAL"
 bitmap.font.size = 20
 bitmap.font.color.set(0, 0, 0)
 bitmap.draw_text(-1, -1, 160, 20, string, 1)
 bitmap.draw_text(+1, -1, 160, 20, string, 1)
 bitmap.draw_text(-1, +1, 160, 20, string, 1)
 bitmap.draw_text(+1, +1, 160, 20, string, 1)
 bitmap.font.color.set(255, 255, 255)
 bitmap.draw_text(0, 0, 160, 20, string, 1)
 end
 num = @_damage.size
 if type != 2
 @_damage.push([::Sprite.new, 40, 0, rand(40) - 20, rand(30) + 50])
 else
 @_damage.push([::Sprite.new, 40, 0, rand(20) - 10, rand(20) + 60])
 end
 @_damage[num][0].bitmap = bitmap
 @_damage[num][0].ox = 80 + self.viewport.ox
 @_damage[num][0].oy = 20 + self.viewport.oy
 if self.battler.is_a?(Game_Actor)
 @_damage[num][0].x = self.x
 @_damage[num][0].y = self.y - self.oy / 2
 else
 @_damage[num][0].x = self.x + self.viewport.rect.x -
 self.ox + self.src_rect.width / 2
 @_damage[num][0].y = self.y - self.oy * self.zoom_y / 2 +
 self.viewport.rect.y
 @_damage[num][0].zoom_x = self.zoom_x
 @_damage[num][0].zoom_y = self.zoom_y
 @_damage[num][0].z = 3000
 end
 end
 def animation(animation, hit)
 return if animation == nil
 num = @_animation.size
 @_animation.push([animation, hit, animation.frame_max, []])
 bitmap = RPG::Cache.animation(animation.animation_name,
 animation.animation_hue)
 if @@_reference_count.include?(bitmap)
 @@_reference_count[bitmap] += 1
 else
 @@_reference_count[bitmap] = 1
 end
 if @_animation[num][0].position != 3 or
 not @@_animations.include?(animation)
 for i in 0..15
 sprite = ::Sprite.new
 sprite.bitmap = bitmap
 sprite.visible = false
 @_animation[num][3].push(sprite)
 end
 unless @@_animations.include?(animation)
 @@_animations.push(animation)
 end
 end
 update_animation(@_animation[num])
 end
 def loop_animation(animation)
 return if animation == @_loop_animation
 dispose_loop_animation
 @_loop_animation = animation
 return if @_loop_animation == nil
 @_loop_animation_index = 0
 animation_name = @_loop_animation.animation_name
 animation_hue = @_loop_animation.animation_hue
 bitmap = RPG::Cache.animation(animation_name, animation_hue)
 if @@_reference_count.include?(bitmap)
 @@_reference_count[bitmap] += 1
 else
 @@_reference_count[bitmap] = 1
 end
 @_loop_animation_sprites = []
 for i in 0..15
 sprite = ::Sprite.new
 sprite.bitmap = bitmap
 sprite.visible = false
 @_loop_animation_sprites.push(sprite)
 end
 # update_loop_animation
 end
 def dispose_damage
 for damage in @_damage.reverse
 damage[0].bitmap.dispose
 damage[0].dispose
 @_damage.delete(damage)
 end
 end
 def dispose_animation
 for anime in @_animation.reverse
 sprite = anime[3][0]
 if sprite != nil
 @@_reference_count[sprite.bitmap] -= 1
 if @@_reference_count[sprite.bitmap] == 0
 sprite.bitmap.dispose
 end
 end
 for sprite in anime[3]
 sprite.dispose
 end
 @_animation.delete(anime)
 end
 end
 def effect?
 @_whiten_duration > 0 or
 @_appear_duration > 0 or
 @_escape_duration > 0 or
 @_collapse_duration > 0 or
 @_damage.size == 0 or
 @_animation.size == 0
 end
 def update
 super
 if @_whiten_duration > 0
 @_whiten_duration -= 1
 self.color.alpha = 128 - (16 - @_whiten_duration) * 10
 end
 if @_appear_duration > 0
 @_appear_duration -= 1
 self.opacity = (16 - @_appear_duration) * 16
 end
 if @_escape_duration > 0
 @_escape_duration -= 1
 self.opacity = 256 - (32 - @_escape_duration) * 10
 end
 if @_collapse_duration > 0
 @_collapse_duration -= 1
 self.opacity = 256 - (48 - @_collapse_duration) * 6
 end
 for damage in @_damage
 if damage[1] > 0
 damage[1] -= 1
 damage[4] -= 3
 damage[2] -= damage[4]
 if self.battler.is_a?(Game_Actor)
 damage[0].x = self.x + (40 - damage[1]) * damage[3] / 10
 damage[0].y = self.y - self.oy / 2 + damage[2] / 10
 else
 damage[0].x = self.x + self.viewport.rect.x -
 self.ox + self.src_rect.width / 2 +
 (40 - damage[1]) * damage[3] / 10
 damage[0].y = self.y - self.oy * self.zoom_y / 2 +
 self.viewport.rect.y + damage[2] / 10
 damage[0].zoom_x = self.zoom_x
 damage[0].zoom_y = self.zoom_y
 end
 damage[0].z = 2960 + damage[1]
 damage[0].opacity = 256 - (12 - damage[1]) * 32
 if damage[1] == 0
 damage[0].bitmap.dispose
 damage[0].dispose
 @_damage.delete(damage)
 end
 end
 end
 for anime in @_animation
 if (Graphics.frame_count % 2 == 0)
 anime[2] -= 1
 update_animation(anime)
 end
 end
 if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
 update_loop_animation
 @_loop_animation_index += 1
 @_loop_animation_index %= @_loop_animation.frame_max
 end
 if @_blink
 @_blink_count = (@_blink_count + 1) % 32
 if @_blink_count < 16
 alpha = (16 - @_blink_count) * 6
 else
 alpha = (@_blink_count - 16) * 6
 end
 self.color.set(255, 255, 255, alpha)
 end
 @@_animations.clear
 end
 def update_animation(anime)
 if anime[2] > 0
 frame_index = anime[0].frame_max - anime[2]
 cell_data = anime[0].frames[frame_index].cell_data
 position = anime[0].position
 animation_set_sprites(anime[3], cell_data, position)
 for timing in anime[0].timings
 if timing.frame == frame_index
 animation_process_timing(timing, anime[1])
 end
 end
 else
 @@_reference_count[anime[3][0].bitmap] -= 1
 if @@_reference_count[anime[3][0].bitmap] == 0
 anime[3][0].bitmap.dispose
 end
 for sprite in anime[3]
 sprite.dispose
 end
 @_animation.delete(anime)
 end
 end
 def animation_set_sprites(sprites, cell_data, position)
 for i in 0..15
 sprite = sprites
 pattern = cell_data[i, 0]
 if sprite == nil or pattern == nil or pattern == -1
 sprite.visible = false if sprite != nil
 next
 end
 sprite.visible = true
 sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
 if position == 3
 if self.viewport != nil
 sprite.x = self.viewport.rect.width / 2
 if $game_temp.in_battle and self.battler.is_a?(Game_Enemy)
 sprite.y = self.viewport.rect.height - 320
 else
 sprite.y = self.viewport.rect.height - 160
 end
 else
 sprite.x = 320
 sprite.y = 240
 end
 else
 sprite.x = self.x + self.viewport.rect.x -
 self.ox + self.src_rect.width / 2
 if $game_temp.in_battle and self.battler.is_a?(Game_Enemy)
 sprite.y = self.y - self.oy * self.zoom_y / 2 +
 self.viewport.rect.y
 if position == 0
 sprite.y -= self.src_rect.height * self.zoom_y / 4
 elsif position == 2
 sprite.y += self.src_rect.height * self.zoom_y / 4
 end
 else
 sprite.y = self.y + self.viewport.rect.y -
 self.oy + self.src_rect.height / 2
 sprite.y -= self.src_rect.height / 4 if position == 0
 sprite.y += self.src_rect.height / 4 if position == 2
 end
 end
 sprite.x += cell_data[i, 1]
 sprite.y += cell_data[i, 2]
 sprite.z = 2000
 sprite.ox = 96
 sprite.oy = 96
 sprite.zoom_x = cell_data[i, 3] / 100.0
 sprite.zoom_y = cell_data[i, 3] / 100.0
 if position != 3
 sprite.zoom_x *= self.zoom_x
 sprite.zoom_y *= self.zoom_y
 end
 sprite.angle = cell_data[i, 4]
 sprite.mirror = (cell_data[i, 5] == 1)
 sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
 sprite.blend_type = cell_data[i, 7]
 end
 end
 def x=(x)
 sx = x - self.x
 if sx != 0
 for anime in @_animation
 if anime[3] != nil
 for i in 0..15
 anime[3].x += sx
 end
 end
 end
 if @_loop_animation_sprites != nil
 for i in 0..15
 @_loop_animation_sprites.x += sx
 end
 end
 end
 super
 end
 def y=(y)
 sy = y - self.y
 if sy != 0
 for anime in @_animation
 if anime[3] != nil
 for i in 0..15
 anime[3].y += sy
 end
 end
 end
 if @_loop_animation_sprites != nil
 for i in 0..15
 @_loop_animation_sprites.y += sy
 end
 end
 end
 super
 end
 end
 ################################################################
 end
 | 
 |