赞 | 0 |
VIP | 62 |
好人卡 | 0 |
积分 | 1 |
经验 | 35234 |
最后登录 | 2014-8-10 |
在线时间 | 601 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 601 小时
- 注册时间
- 2007-8-14
- 帖子
- 635
|
8楼
楼主 |
发表于 2009-1-11 20:43:21
|
只看该作者
RPG::Sprite下的只有Sprite_Character和Sprite_Battler这两个,里面没se(只有演奏逃跑之类的系统音效||)
RTAB系统脚本对动画重新定义的那块是
module RPG
class Sprite < ::Sprite
里面也没找到se之类的东西|||||||||
这是RTAB里面动画的那段{/pz}
- #==============================================================================
- # ■ Spriteモジュール
- #------------------------------------------------------------------------------
- # アニメーションの管理を行うモジュールです。
- #==============================================================================
- 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[i]
- 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 - 300
- else
- sprite.y = self.viewport.rect.height - 300
- 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 = 150#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][i].x += sx
- end
- end
- end
- if @_loop_animation_sprites != nil
- for i in 0..15
- @_loop_animation_sprites[i].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][i].y += sy
- end
- end
- end
- if @_loop_animation_sprites != nil
- for i in 0..15
- @_loop_animation_sprites[i].y += sy
- end
- end
- end
- super
- end
- end
- end
复制代码 |
|