Project1

标题: [增补功能]循环动画 [打印本页]

作者: 禾西    时间: 2008-4-26 18:07
标题: [增补功能]循环动画
本帖最后由 禾西 于 2011-4-20 06:19 编辑

做遊戲時候寫出來的副産品
作用:在固定位置不停播放循環動畫,如同窗口一樣。

調用方法:Sprite_Animation.new(x,y,z)
類方法:

設置/更改循環動畫ID:
.id =


暫停:
.pause = true


隱藏:
.visible = false

坐標:
.x =
.y =
.z =
  1. #==============================================================================
  2. # ■ Sprite_Animation / 動畫使用增強
  3. #------------------------------------------------------------------------------

  4. class Sprite_Animation < RPG::Sprite
  5.   #--------------------------------------------------------------------------
  6.   # ● 取得動畫ID
  7.   #--------------------------------------------------------------------------
  8.   attr_accessor :id
  9.   attr_accessor :pause
  10.   attr_accessor :visible
  11.   #--------------------------------------------------------------------------
  12.   # ● 初始化物件
  13.   #     viewport : 顯示連接埠
  14.   #--------------------------------------------------------------------------
  15.   def initialize(x=0,y=0,z=5000)
  16.     @viewport = Viewport.new(0, 0, 640, 480)
  17.     @viewport.z = z
  18.     super(@viewport)
  19.     self.id = 0
  20.     self.pause   = false
  21.     self.visible = true
  22.     # 設定活動區塊的座標
  23.     self.x = x
  24.     self.y = y
  25.     self.z = z
  26.     update
  27.   end
  28.   alias old_update update
  29.   #--------------------------------------------------------------------------
  30.   # ● 更新畫面
  31.   #--------------------------------------------------------------------------
  32.   def update
  33.     if self.pause or self.id == 0
  34.       return
  35.     else
  36.       old_update
  37.     end
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 一次性用完即弃的动画
  41.   #--------------------------------------------------------------------------
  42.   def self.show(id,x=0,y=0)
  43.     s = self.new(x, y)
  44.     a = $data_animations[id]
  45.     s.animation(a,false)
  46.     while s.effect?
  47.       s.old_update
  48.       Graphics.update
  49.     end
  50.     s.dispose
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 釋放
  54.   #--------------------------------------------------------------------------
  55.   def dispose
  56.     (self.bitmap.dispose) unless (self.bitmap == nil)
  57.     @viewport.dispose
  58.     @viewport.dispose
  59.     super
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 更改動畫
  63.   #--------------------------------------------------------------------------
  64.   def id=(int)
  65.     @id = int
  66.     if id == 0
  67.       dispose_loop_animation
  68.       return
  69.     end
  70.     animation = $data_animations[self.id]
  71.     loop_animation(animation)
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 更改可視化
  75.   #--------------------------------------------------------------------------
  76.   def visible=(bool)
  77.     super(bool)
  78.     if bool
  79.       animation = $data_animations[self.id]
  80.       loop_animation(animation)
  81.     else
  82.       dispose_loop_animation
  83.     end
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 單幀設置算法
  87.   #--------------------------------------------------------------------------
  88.   def animation_set_sprites(sprites, cell_data, position)
  89.     for i in 0..15
  90.       sprite = sprites[i]
  91.       pattern = cell_data[i, 0]
  92.       if sprite == nil or pattern == nil or pattern == -1
  93.         sprite.visible = false if sprite != nil
  94.         next
  95.       end
  96.       sprite.visible = true
  97.       sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  98.       if position == 3
  99.         if self.viewport != nil
  100.           sprite.x = self.viewport.rect.width / 2
  101.           sprite.y = self.viewport.rect.height - 160
  102.         else
  103.           sprite.x = 320
  104.           sprite.y = 240
  105.         end
  106.       else
  107.         sprite.x = self.x - self.ox + self.src_rect.width / 2
  108.         sprite.y = self.y - self.oy + self.src_rect.height / 2
  109.         sprite.y -= self.src_rect.height / 4 if position == 0
  110.         sprite.y += self.src_rect.height / 4 if position == 2
  111.       end
  112.       sprite.x += cell_data[i, 1]
  113.       sprite.y += cell_data[i, 2]
  114.       sprite.z = 2000
  115.       sprite.ox = 96
  116.       sprite.oy = 96
  117.       sprite.zoom_x = cell_data[i, 3] / 100.0
  118.       sprite.zoom_y = cell_data[i, 3] / 100.0
  119.       sprite.angle = cell_data[i, 4]
  120.       sprite.mirror = (cell_data[i, 5] == 1)
  121.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  122.       sprite.blend_type = cell_data[i, 7]
  123.     end
  124.   end
  125. end
复制代码
技術含量基本上等於零……
不擅長表達,需要播放多個動畫的人應該知道有甚麽用途==|||
作者: 030428    时间: 2008-4-26 18:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: 禾西    时间: 2008-4-26 19:26
有時有必要,可能你沒有碰上吧?
比如戰鬥全動畫腳本的待機動畫就是需要。
動畫描述附加狀態組也需要。
一些循環表示的動畫也也需要。
甚至可以用來寫烟花,流星雨,閃電等等的天氣腳本……等等。

作者: Iselia雪    时间: 2008-4-26 21:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-4-26 21:56
那个,其实我想说我家阿雪是这只……= =
http://i35.photobucket.com/albums/d159/nightendless/je1-1.png
脚本……抬头望天……收下来慢慢研究……
作者: 禾西    时间: 2008-4-27 06:53
看來阿雪沒有看到這句:
技術含量基本上等於零……

本來就沒有技術含量,就是抽出來方便使用而已。
作者: 精灵使者    时间: 2008-4-27 07:41
这个脚本不错……收下了……
作者: TERENCE    时间: 2008-4-27 19:13
我本来打算制作这个,
来用到我的恶魔城探索地图系统,
角色位置光点循环动画,
沒想到禾西先做出來了,

嘿嘿~~~现学现用(恶魔城探索地图系统版本又要提升了)
作者: lldjjf    时间: 2008-4-27 19:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2008-4-27 20:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 禾西    时间: 2008-4-27 20:03
一樣的,完全調用sprite的原始方法.一點的原創都沒有。
只是把不常用的功能全部去掉。就是這樣了.....
作者: TERENCE    时间: 2008-4-27 20:13
以下引用禾西于2008-4-27 12:03:00的发言:

一樣的,完全調用sprite的原始方法.一點的原創都沒有。
只是把不常用的功能全部去掉。就是這樣了.....

虽然一点的原创都没有,可是卻可以实现不少华丽的效果啊~~~~~
作者: 御灵    时间: 2008-5-24 07:57
发布完毕。
http://rpg.blue/web/htm/news1064.htm
vip+2
作者: Iselia雪    时间: 2009-6-12 08:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 一醉倾城    时间: 2009-7-30 01:28
半年没来了,突然发现6R原来出现了这么多人才。。。




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