# ▽△▽ No123. ダメージポップス ▽△▽ # # update 2005/ 4/13 # #============================================================================== # カスタマイズポイント #============================================================================== module XRXS_DAMAGE # # ダメージ初速 # def damage_x_init_velocity return 0.2 * (rand(5) - 2) end def damage_y_init_velocity return 12 end # # 重力値 (小さくするとふんわり、大きくするとスピーディにダメージポップ) # GRAVITY = 0.98 # # 透過開始デュレイションライン(値が大きいほど早くから透明化が始まる) # TRANCEPARENT_START = 8 # # 透過実行時 X スライド速度 # TRANCEPARENT_X_SLIDE = 0 end #============================================================================== # --- XRXS.ダメージ表示変換機構 --- #============================================================================== module XRXS_DAMAGE def update super @damage_sprites = [] if @damage_sprites.nil? @damage_durations = [] if @damage_durations.nil? # ダメージ変換 if @_damage_sprite != nil and @_damage_sprite.visible x = damage_x_init_velocity y = damage_y_init_velocity d = @_damage_duration @damage_sprites.push(Sprite_Damage.new(@_damage_sprite, x, y, d)) @_damage_sprite.visible = false end # ダメージの更新 for damage_sprite in @damage_sprites damage_sprite.update end for i in 0...@damage_sprites.size @damage_sprites[i] = nil if @damage_sprites[i].disposed? end @damage_sprites.compact! end def dispose super # ダメージの解放 if @damage_sprites != nil for damage_sprite in @damage_sprites damage_sprite.dispose end end end end class RPG::Sprite < Sprite include XRXS_DAMAGE end class Sprite_Damage < Sprite #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(sprite, init_x_speed, init_y_speed, duration) super(nil) self.bitmap = sprite.bitmap.dup unless sprite.bitmap.nil? self.opacity = sprite.opacity self.x = sprite.x self.y = sprite.y self.z = sprite.z self.ox = sprite.ox self.oy = sprite.oy @now_x_speed = init_x_speed @now_y_speed = init_y_speed @potential_x_energy = 0.0 @potential_y_energy = 0.0 @duration = duration end #-------------------------------------------------------------------------- # ○ フレーム更新 #-------------------------------------------------------------------------- def update # 透過の更新 if @duration <= XRXS_DAMAGE::TRANCEPARENT_START self.opacity -= (256 / XRXS_DAMAGE::TRANCEPARENT_START) self.x += XRXS_DAMAGE::TRANCEPARENT_X_SLIDE end # 呼び戻す super # バウンド判定 n = self.oy + @now_y_speed if n <= 0 @now_y_speed *= -1 @now_y_speed /= 2 @now_x_speed /= 2 end # Y 位置の更新 self.oy = [n, 0].max @potential_y_energy += XRXS_DAMAGE::GRAVITY speed = @potential_y_energy.floor @now_y_speed -= speed @potential_y_energy -= speed # X 位置の更新 @potential_x_energy += @now_x_speed speed = @potential_x_energy.floor self.ox += speed @potential_x_energy -= speed # 解放 @duration -= 1 if @duration == 0 self.dispose end end end