Project1

标题: 死亡特效 [打印本页]

作者: 神思    时间: 2008-2-4 07:34
标题: 死亡特效
强人勿看!!!



第一次试着写VX的脚本..就把以前做过的一个东西做到VX上来...
话说RGSS2写的好规范的说..

就是敌人死亡后的一些莫名其妙的效果..
缩小and旋转.碎片.之类的..

  1. #==============================================================================
  2. # ■ Sprite_Battler
  3. #------------------------------------------------------------------------------
  4. #  战斗显示用活动块。Game_Battler 类的实例监视、
  5. # 活动块的状态的监视。
  6. #==============================================================================
  7. module DeadEffect
  8.   Normal = 0
  9.   Flying = 1
  10.   Half = 2
  11.   Debris = 3
  12.   Debris_Size = 30
  13.   Rotating = 4
  14.   Wave = 5
  15. end
  16. class Sprite_Battler < Sprite_Base
  17.   include DeadEffect
  18.   #--------------------------------------------------------------------------
  19.   # ● 定量
  20.   #--------------------------------------------------------------------------
  21.   WHITEN    = 1                      # 白色闪光 (行动开始)
  22.   BLINK     = 2                      # 闪烁 (伤害)
  23.   APPEAR    = 3                      # 出现 (出现、复活)
  24.   DISAPPEAR = 4                      # 消失 (逃走)
  25.   COLLAPSE  = 5                      # 崩坏 (战斗不能)
  26.   #--------------------------------------------------------------------------
  27.   # ● 定义实例变量
  28.   #--------------------------------------------------------------------------
  29.   attr_accessor :battler
  30.   #--------------------------------------------------------------------------
  31.   # ● 初始化对像
  32.   #     viewport : 视口
  33.   #     battler  : 战斗者 (Game_Battler)
  34.   #--------------------------------------------------------------------------
  35.   def initialize(viewport, battler = nil)
  36.     super(viewport)
  37.     @battler = battler
  38.     @battler_visible = false
  39.     @effect_type = 0            # 效果种类
  40.     @effect_duration = 0        # 效果剩余时间
  41.     @dead_sprites = []           # 精灵
  42.     @dead_type = 0
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 释放
  46.   #--------------------------------------------------------------------------
  47.   def dispose
  48.     if self.bitmap != nil
  49.       self.bitmap.dispose
  50.     end
  51.     super
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 刷新画面
  55.   #--------------------------------------------------------------------------
  56.   def update
  57.     super
  58.     if @battler == nil
  59.       self.bitmap = nil
  60.     else
  61.       @use_sprite = @battler.use_sprite?
  62.       if @use_sprite
  63.         self.x = @battler.screen_x
  64.         self.y = @battler.screen_y
  65.         self.z = @battler.screen_z
  66.         update_battler_bitmap
  67.       end
  68.       setup_new_effect
  69.       update_effect
  70.     end
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 刷新传送的位图数据
  74.   #--------------------------------------------------------------------------
  75.   def update_battler_bitmap
  76.     if @battler.battler_name != @battler_name or
  77.        @battler.battler_hue != @battler_hue
  78.       @battler_name = @battler.battler_name
  79.       @battler_hue = @battler.battler_hue
  80.       self.bitmap = Cache.battler(@battler_name, @battler_hue)
  81.       @width = bitmap.width
  82.       @height = bitmap.height
  83.       self.ox = @width / 2
  84.       self.oy = @height
  85.       if @battler.dead? or @battler.hidden
  86.         self.opacity = 0
  87.       end
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 设置新效果
  92.   #--------------------------------------------------------------------------
  93.   def setup_new_effect
  94.     if @battler.white_flash
  95.       @effect_type = WHITEN
  96.       @effect_duration = 16
  97.       @battler.white_flash = false
  98.     end
  99.     if @battler.blink
  100.       @effect_type = BLINK
  101.       @effect_duration = 20
  102.       @battler.blink = false
  103.     end
  104.     if not @battler_visible and @battler.exist?
  105.       @effect_type = APPEAR
  106.       @effect_duration = 16
  107.       @battler_visible = true
  108.     end
  109.     if @battler_visible and @battler.hidden
  110.       @effect_type = DISAPPEAR
  111.       @effect_duration = 32
  112.       @battler_visible = false
  113.     end
  114.     if @battler.collapse
  115.       @effect_type = COLLAPSE
  116.       @effect_duration = 48
  117.       @battler.collapse = false
  118.       @battler_visible = false
  119.       @dead_type = rand(6)
  120.       dead_effect
  121.     end
  122.     if @battler.animation_id != 0
  123.       animation = $data_animations[@battler.animation_id]
  124.       mirror = @battler.animation_mirror
  125.       start_animation(animation, mirror)
  126.       @battler.animation_id = 0
  127.     end
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 刷新效果
  131.   #--------------------------------------------------------------------------
  132.   def update_effect
  133.     if @effect_duration > 0
  134.       @effect_duration -= 1
  135.       case @effect_type
  136.       when WHITEN
  137.         update_whiten
  138.       when BLINK
  139.         update_blink
  140.       when APPEAR
  141.         update_appear
  142.       when DISAPPEAR
  143.         update_disappear
  144.       when COLLAPSE
  145.         update_collapse
  146.       end
  147.     end
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 刷新白色闪光效果
  151.   #--------------------------------------------------------------------------
  152.   def update_whiten
  153.     self.blend_type = 0
  154.     self.color.set(255, 255, 255, 128)
  155.     self.opacity = 255
  156.     self.color.alpha = 128 - (16 - @effect_duration) * 10
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 刷新闪烁效果
  160.   #--------------------------------------------------------------------------
  161.   def update_blink
  162.     self.blend_type = 0
  163.     self.color.set(0, 0, 0, 0)
  164.     self.opacity = 255
  165.     self.visible = (@effect_duration % 10 < 5)
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 刷新出现效果
  169.   #--------------------------------------------------------------------------
  170.   def update_appear
  171.     self.blend_type = 0
  172.     self.color.set(0, 0, 0, 0)
  173.     self.opacity = (16 - @effect_duration) * 16
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● 刷新消失效果
  177.   #--------------------------------------------------------------------------
  178.   def update_disappear
  179.     self.blend_type = 0
  180.     self.color.set(0, 0, 0, 0)
  181.     self.opacity = 256 - (32 - @effect_duration) * 10
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 刷新崩坏效果
  185.   #--------------------------------------------------------------------------
  186.   def update_collapse
  187.     case @dead_type
  188.     when Normal
  189.       self.opacity = 256 - (48 - @effect_duration) * 6
  190.     when Flying
  191.       @dead_sprites.each{|sprite|sprite.y -= 10;sprite.opacity = 256 - (48 - @effect_duration) * 6}
  192.       self.opacity = 256 - (32 - @effect_duration) * 10
  193.     when Half
  194.       @dead_sprites[0].x -= 5
  195.       @dead_sprites[1].x += 5
  196.       @dead_sprites.each{|sprite|sprite.opacity = 256 - (48 - @effect_duration) * 6}
  197.     when Debris
  198.       @dead_sprites.each{|sprite|sprite.y -= 5;sprite.x += (rand(5)-2);sprite.opacity = 256 - (48 - @effect_duration) * 6}
  199.     when Rotating
  200.       @dead_sprites.each{|sprite|sprite.angle += 360/48;sprite.zoom_x -= 0.025;sprite.zoom_y -= 0.025}
  201.     when Wave
  202.       @dead_sprites.each{|sprite|sprite.update;sprite.opacity = 256 - (48 - @effect_duration) * 6}
  203.     end
  204.     if @effect_duration == 0
  205.       @dead_sprites.each{|sprite|sprite.dispose}
  206.       @dead_sprites.clear
  207.     end
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● 死亡效果
  211.   #--------------------------------------------------------------------------
  212.   def dead_effect
  213.     case @dead_type
  214.     when Normal
  215.       self.blend_type = 1
  216.       self.color.set(255, 128, 128, 128)
  217.     when Flying
  218.       sprite = Sprite.new(self.viewport)
  219.       sprite.bitmap = self.bitmap
  220.       sprite.x = self.x
  221.       sprite.y = self.y
  222.       sprite.z = self.z + 1
  223.       sprite.ox = self.ox
  224.       sprite.oy = self.oy
  225.       @dead_sprites << sprite
  226.       self.blend_type = 0
  227.       self.color.set(0, 0, 0, 0)
  228.     when Half
  229.       sprite_up = Sprite.new(self.viewport)
  230.       sprite_up.bitmap = self.bitmap
  231.       sprite_up.ox = self.ox
  232.       sprite_up.oy = self.oy
  233.       sprite_up.x = self.x
  234.       sprite_up.y = self.y
  235.       sprite_up.src_rect.height /= 2
  236.       sprite_down = Sprite.new(self.viewport)
  237.       sprite_down.bitmap = self.bitmap
  238.       sprite_down.ox = self.ox
  239.       sprite_down.oy = self.oy
  240.       sprite_down.x = self.x
  241.       sprite_down.y = self.y + (self.height / 2)
  242.       sprite_down.src_rect.height /= 2
  243.       sprite_down.src_rect.y += sprite_down.src_rect.height
  244.       @dead_sprites << sprite_up << sprite_down
  245.       self.opacity = 0
  246.     when Debris
  247.       for x in 0...Debris_Size
  248.         for y in 0...Debris_Size
  249.           sprite = Sprite.new(self.viewport)
  250.           sprite.bitmap = self.bitmap
  251.           sprite.ox = self.ox
  252.           sprite.oy = self.oy
  253.           sprite.x = self.x + (x * (self.width / Debris_Size))
  254.           sprite.y = self.y + (y * (self.height / Debris_Size))
  255.           sprite.src_rect.set(
  256.           (x * (self.width / Debris_Size)),
  257.           (y * (self.height / Debris_Size)),
  258.           (self.width / Debris_Size),
  259.           (self.height / Debris_Size))
  260.           @dead_sprites << sprite
  261.           self.opacity = 0
  262.         end
  263.       end
  264.     when Rotating
  265.       sprite = Sprite.new(self.viewport)
  266.       sprite.bitmap = self.bitmap
  267.       sprite.ox = self.ox
  268.       sprite.oy = @height / 2
  269.       sprite.x = self.x
  270.       sprite.y = self.y - sprite.oy
  271.       @dead_sprites << sprite
  272.       self.opacity = 0
  273.     when Wave
  274.       sprite = Sprite.new(self.viewport)
  275.       sprite.bitmap = self.bitmap
  276.       sprite.ox = self.ox
  277.       sprite.oy = self.oy
  278.       sprite.x = self.x
  279.       sprite.y = self.y
  280.       sprite.wave_amp = 10
  281.       @dead_sprites << sprite
  282.       self.opacity = 0
  283.     end
  284.   end
  285. end
复制代码

作者: 孤独de思念    时间: 2008-2-4 07:47
我是弱人  要看  试下!
作者: 孤独de思念    时间: 2008-2-4 07:51
好像效果不显著
作者: 司马睿风    时间: 2008-2-4 08:35
有范例或截图没?
作者: 菲恩    时间: 2008-2-4 09:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: 宾少    时间: 2008-11-23 10:41
这个效果很好的说~但是发现角色要是死了的话,就会出错。。。
作者: 桑田百合    时间: 2009-7-7 10:05
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1