赞 | 0 |
VIP | 133 |
好人卡 | 5 |
积分 | 1 |
经验 | 15036 |
最后登录 | 2017-9-12 |
在线时间 | 190 小时 |
Lv1.梦旅人 彩色的银子
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 190 小时
- 注册时间
- 2006-6-13
- 帖子
- 1361
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
强人勿看!!!
第一次试着写VX的脚本..就把以前做过的一个东西做到VX上来...
话说RGSS2写的好规范的说..
就是敌人死亡后的一些莫名其妙的效果..
缩小and旋转.碎片.之类的..
- #==============================================================================
- # ■ Sprite_Battler
- #------------------------------------------------------------------------------
- # 战斗显示用活动块。Game_Battler 类的实例监视、
- # 活动块的状态的监视。
- #==============================================================================
- module DeadEffect
- Normal = 0
- Flying = 1
- Half = 2
- Debris = 3
- Debris_Size = 30
- Rotating = 4
- Wave = 5
- end
- class Sprite_Battler < Sprite_Base
- include DeadEffect
- #--------------------------------------------------------------------------
- # ● 定量
- #--------------------------------------------------------------------------
- WHITEN = 1 # 白色闪光 (行动开始)
- BLINK = 2 # 闪烁 (伤害)
- APPEAR = 3 # 出现 (出现、复活)
- DISAPPEAR = 4 # 消失 (逃走)
- COLLAPSE = 5 # 崩坏 (战斗不能)
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :battler
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # viewport : 视口
- # battler : 战斗者 (Game_Battler)
- #--------------------------------------------------------------------------
- def initialize(viewport, battler = nil)
- super(viewport)
- @battler = battler
- @battler_visible = false
- @effect_type = 0 # 效果种类
- @effect_duration = 0 # 效果剩余时间
- @dead_sprites = [] # 精灵
- @dead_type = 0
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- if self.bitmap != nil
- self.bitmap.dispose
- end
- super
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- super
- if @battler == nil
- self.bitmap = nil
- else
- @use_sprite = @battler.use_sprite?
- if @use_sprite
- self.x = @battler.screen_x
- self.y = @battler.screen_y
- self.z = @battler.screen_z
- update_battler_bitmap
- end
- setup_new_effect
- update_effect
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新传送的位图数据
- #--------------------------------------------------------------------------
- def update_battler_bitmap
- if @battler.battler_name != @battler_name or
- @battler.battler_hue != @battler_hue
- @battler_name = @battler.battler_name
- @battler_hue = @battler.battler_hue
- self.bitmap = Cache.battler(@battler_name, @battler_hue)
- @width = bitmap.width
- @height = bitmap.height
- self.ox = @width / 2
- self.oy = @height
- if @battler.dead? or @battler.hidden
- self.opacity = 0
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 设置新效果
- #--------------------------------------------------------------------------
- def setup_new_effect
- if @battler.white_flash
- @effect_type = WHITEN
- @effect_duration = 16
- @battler.white_flash = false
- end
- if @battler.blink
- @effect_type = BLINK
- @effect_duration = 20
- @battler.blink = false
- end
- if not @battler_visible and @battler.exist?
- @effect_type = APPEAR
- @effect_duration = 16
- @battler_visible = true
- end
- if @battler_visible and @battler.hidden
- @effect_type = DISAPPEAR
- @effect_duration = 32
- @battler_visible = false
- end
- if @battler.collapse
- @effect_type = COLLAPSE
- @effect_duration = 48
- @battler.collapse = false
- @battler_visible = false
- @dead_type = rand(6)
- dead_effect
- end
- if @battler.animation_id != 0
- animation = $data_animations[@battler.animation_id]
- mirror = @battler.animation_mirror
- start_animation(animation, mirror)
- @battler.animation_id = 0
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新效果
- #--------------------------------------------------------------------------
- def update_effect
- if @effect_duration > 0
- @effect_duration -= 1
- case @effect_type
- when WHITEN
- update_whiten
- when BLINK
- update_blink
- when APPEAR
- update_appear
- when DISAPPEAR
- update_disappear
- when COLLAPSE
- update_collapse
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新白色闪光效果
- #--------------------------------------------------------------------------
- def update_whiten
- self.blend_type = 0
- self.color.set(255, 255, 255, 128)
- self.opacity = 255
- self.color.alpha = 128 - (16 - @effect_duration) * 10
- end
- #--------------------------------------------------------------------------
- # ● 刷新闪烁效果
- #--------------------------------------------------------------------------
- def update_blink
- self.blend_type = 0
- self.color.set(0, 0, 0, 0)
- self.opacity = 255
- self.visible = (@effect_duration % 10 < 5)
- end
- #--------------------------------------------------------------------------
- # ● 刷新出现效果
- #--------------------------------------------------------------------------
- def update_appear
- self.blend_type = 0
- self.color.set(0, 0, 0, 0)
- self.opacity = (16 - @effect_duration) * 16
- end
- #--------------------------------------------------------------------------
- # ● 刷新消失效果
- #--------------------------------------------------------------------------
- def update_disappear
- self.blend_type = 0
- self.color.set(0, 0, 0, 0)
- self.opacity = 256 - (32 - @effect_duration) * 10
- end
- #--------------------------------------------------------------------------
- # ● 刷新崩坏效果
- #--------------------------------------------------------------------------
- def update_collapse
- case @dead_type
- when Normal
- self.opacity = 256 - (48 - @effect_duration) * 6
- when Flying
- @dead_sprites.each{|sprite|sprite.y -= 10;sprite.opacity = 256 - (48 - @effect_duration) * 6}
- self.opacity = 256 - (32 - @effect_duration) * 10
- when Half
- @dead_sprites[0].x -= 5
- @dead_sprites[1].x += 5
- @dead_sprites.each{|sprite|sprite.opacity = 256 - (48 - @effect_duration) * 6}
- when Debris
- @dead_sprites.each{|sprite|sprite.y -= 5;sprite.x += (rand(5)-2);sprite.opacity = 256 - (48 - @effect_duration) * 6}
- when Rotating
- @dead_sprites.each{|sprite|sprite.angle += 360/48;sprite.zoom_x -= 0.025;sprite.zoom_y -= 0.025}
- when Wave
- @dead_sprites.each{|sprite|sprite.update;sprite.opacity = 256 - (48 - @effect_duration) * 6}
- end
- if @effect_duration == 0
- @dead_sprites.each{|sprite|sprite.dispose}
- @dead_sprites.clear
- end
- end
- #--------------------------------------------------------------------------
- # ● 死亡效果
- #--------------------------------------------------------------------------
- def dead_effect
- case @dead_type
- when Normal
- self.blend_type = 1
- self.color.set(255, 128, 128, 128)
- when Flying
- sprite = Sprite.new(self.viewport)
- sprite.bitmap = self.bitmap
- sprite.x = self.x
- sprite.y = self.y
- sprite.z = self.z + 1
- sprite.ox = self.ox
- sprite.oy = self.oy
- @dead_sprites << sprite
- self.blend_type = 0
- self.color.set(0, 0, 0, 0)
- when Half
- sprite_up = Sprite.new(self.viewport)
- sprite_up.bitmap = self.bitmap
- sprite_up.ox = self.ox
- sprite_up.oy = self.oy
- sprite_up.x = self.x
- sprite_up.y = self.y
- sprite_up.src_rect.height /= 2
- sprite_down = Sprite.new(self.viewport)
- sprite_down.bitmap = self.bitmap
- sprite_down.ox = self.ox
- sprite_down.oy = self.oy
- sprite_down.x = self.x
- sprite_down.y = self.y + (self.height / 2)
- sprite_down.src_rect.height /= 2
- sprite_down.src_rect.y += sprite_down.src_rect.height
- @dead_sprites << sprite_up << sprite_down
- self.opacity = 0
- when Debris
- for x in 0...Debris_Size
- for y in 0...Debris_Size
- sprite = Sprite.new(self.viewport)
- sprite.bitmap = self.bitmap
- sprite.ox = self.ox
- sprite.oy = self.oy
- sprite.x = self.x + (x * (self.width / Debris_Size))
- sprite.y = self.y + (y * (self.height / Debris_Size))
- sprite.src_rect.set(
- (x * (self.width / Debris_Size)),
- (y * (self.height / Debris_Size)),
- (self.width / Debris_Size),
- (self.height / Debris_Size))
- @dead_sprites << sprite
- self.opacity = 0
- end
- end
- when Rotating
- sprite = Sprite.new(self.viewport)
- sprite.bitmap = self.bitmap
- sprite.ox = self.ox
- sprite.oy = @height / 2
- sprite.x = self.x
- sprite.y = self.y - sprite.oy
- @dead_sprites << sprite
- self.opacity = 0
- when Wave
- sprite = Sprite.new(self.viewport)
- sprite.bitmap = self.bitmap
- sprite.ox = self.ox
- sprite.oy = self.oy
- sprite.x = self.x
- sprite.y = self.y
- sprite.wave_amp = 10
- @dead_sprites << sprite
- self.opacity = 0
- end
- end
- end
复制代码 |
|