| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 3 |  
| 经验 | 13852 |  
| 最后登录 | 2022-10-15 |  
| 在线时间 | 286 小时 |  
 Lv2.观梦者 
	梦石0 星屑265 在线时间286 小时注册时间2009-11-7帖子55 
 | 
| 脚本冲突: 多个动画脚本 就是地图上一个事件同时显示多个动画
 伤害美化 是美化的地图显示伤害  两者一起用则多个动画无效求解决
 
 多个动画脚本 就是使一个事件同时显示多个动画#==============================================================================# 本脚本来自www.66RPG.com,使用和转载请保留此信息
 #==============================================================================
 
 
 # ============================================================================
 # 伤害效果美化 v1.0 by SailCat
 # ============================================================================
 
 # 脚本使用说明:
 
 # 1.使用时需要将Damage.png复制到你的游戏的Graphics/Pictures目录下
 
 # 2.Damage.png文件的格式:
 
 #   大小为180 x 96
 
 #   (0, 0) - (179, 31)为伤害值的数字表,其中每个数字宽18,高32
 
 #   (0, 32) - (179, 63)为回复值(伤害负值)的数字表,其中每个数字宽18,高32
 
 #   (0, 64) - (89, 95)为会心一击标记的图画,长宽为90 x 32
 
 #   (90, 64) - (179, 95)为未命中标记的图画,长宽为90 x 32
 
 # ============================================================================
 
 module RPG
 
 class Sprite < ::Sprite
 
 #--------------------------------------------------------------------------
 
 # ● 伤害值描画
 
 #--------------------------------------------------------------------------
 
 def damage(value, critical)
 # 释放伤害,效果是伤害数字快速消失,觉得不如不消失好看......
 #dispose_damage
 # 如果伤害值是数值
 if value.is_a?(Numeric)
 # 绝对值转为字符串
 damage_string = value.abs.to_s
 else
 # 转为字符串
 damage_string = value.to_s
 end
 # 初始化位图
 bitmap = Bitmap.new(162, 64)
 bitmap.font.name = ["黑体","华文行楷", "宋体"]
 bitmap.font.size = 32
 # 伤害值是数值的情况下
 if value.is_a?(Numeric)
 # 分割伤害值字符串
 damage_array = damage_string.scan(/./)
 damage_x = 81 - damage_string.size * 9
 # 伤害值为负的情况下
 if value < 0
 # 调用回复数字表
 rect_y = 32
 else
 # 调用伤害数字表
 rect_y = 0
 end
 # 循环伤害值字符串
 for char in damage_array
 number = char.to_i
 # 显示伤害数字
 bitmap.blt(damage_x, 32, RPG::Cache.picture("Damage"),
 Rect.new(number * 18, rect_y, 18, 32))
 # 后移一位
 damage_x += 18
 end
 # 伤害值不是数值的情况
 else
 if value == "miss"
 # 显示未击中图画
 bitmap.blt(36, 28, RPG::Cache.picture("Damage"), Rect.new(90, 64, 90, 32))
 end
 end
 # 会心一击标志打开的情况,
 if critical
 # 显示会心一击图画
 bitmap.blt(36, 0, RPG::Cache.picture("Damage"), Rect.new(0, 64, 90, 32))
 end
 # 伤害值定位
 @_damage_sprite = ::Sprite.new(self.viewport)
 @_damage_sprite.bitmap = bitmap
 @_damage_sprite.ox = 81
 @_damage_sprite.oy = 20
 @_damage_sprite.x = self.x
 @_damage_sprite.y = self.y - self.oy / 2
 @_damage_sprite.z = 3000
 @_damage_duration = 40
 @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
 make_total_damage(value)
 end
 end
 end
伤害美化  配合的地图显示伤害 (ARPG)
 如果两个一起用 多个动画就无效了
 多个动画
 #--------------------------------------------------# 此脚本来自www.66RPG.com,使用请保留此信息
 #--------------------------------------------------
 module RPG
 class Sprite < ::Sprite
 def initialize(viewport = nil)
 super(viewport)
 @_whiten_duration = 0
 @_appear_duration = 0
 @_escape_duration = 0
 @_collapse_duration = 0
 @_damage_duration = 0
 @_animation_duration = 0
 @_blink = false
 @_animation = []
 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] != 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_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 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
 if @_damage_duration > 0
 @_damage_duration -= 1
 case @_damage_duration
 when 38..39
 @_damage_sprite.y -= 4
 when 36..37
 @_damage_sprite.y -= 2
 when 34..35
 @_damage_sprite.y += 2
 when 28..33
 @_damage_sprite.y += 4
 end
 @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
 if @_damage_duration == 0
 dispose_damage
 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
 end
 end
伤害美化(选自发布区ARPG同时22个怪物不卡)
 
 
 多个动画
 
 #--------------------------------------------------# 此脚本来自www.66RPG.com,使用请保留此信息
 #--------------------------------------------------
 module RPG
 class Sprite < ::Sprite
 def initialize(viewport = nil)
 super(viewport)
 @_whiten_duration = 0
 @_appear_duration = 0
 @_escape_duration = 0
 @_collapse_duration = 0
 @_damage_duration = 0
 @_animation_duration = 0
 @_blink = false
 @_animation = []
 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] != 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_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 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
 if @_damage_duration > 0
 @_damage_duration -= 1
 case @_damage_duration
 when 38..39
 @_damage_sprite.y -= 4
 when 36..37
 @_damage_sprite.y -= 2
 when 34..35
 @_damage_sprite.y += 2
 when 28..33
 @_damage_sprite.y += 4
 end
 @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
 if @_damage_duration == 0
 dispose_damage
 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
 end
 end
 好记的名字于2011-7-2 15:22补充以下内容:
 {:4_96:}求解啊求解 怎么没人  在线等
 | 
 |