扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 103|回复: 0

[转载发布] [增补功能]循环动画

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2338

    主题

    403

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10607
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13376

    灌水之王

    发表于 2024-4-19 16:25:20 | 显示全部楼层 |阅读模式
    做遊戲時候寫出來的副産品
    作用:在固定位置不停播放循環動畫,如同窗口一樣。

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

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

    暫停:
    .pause = true

    隱藏:
    .visible = false
    坐標:
    .x =
    .y =
    .z =
    1. #==============================================================================# ■ Sprite_Animation / 動畫使用增強#------------------------------------------------------------------------------class Sprite_Animation < RPG::Sprite  #--------------------------------------------------------------------------  # ● 取得動畫ID  #--------------------------------------------------------------------------  attr_accessor :id  attr_accessor :pause  attr_accessor :visible  #--------------------------------------------------------------------------  # ● 初始化物件  #     viewport : 顯示連接埠  #--------------------------------------------------------------------------  def initialize(x=0,y=0,z=5000)    @viewport = Viewport.new(0, 0, 640, 480)    @viewport.z = z     super(@viewport)    self.id = 0    self.pause   = false    self.visible = true    # 設定活動區塊的座標    self.x = x    self.y = y    self.z = z    update  end  alias old_update update  #--------------------------------------------------------------------------  # ● 更新畫面  #--------------------------------------------------------------------------  def update    if self.pause or self.id == 0      return    else      old_update    end  end  #--------------------------------------------------------------------------  # ● 一次性用完即弃的动画  #--------------------------------------------------------------------------  def self.show(id,x=0,y=0)    s = self.new(x, y)    a = $data_animations[id]    s.animation(a,false)    while s.effect?      s.old_update      Graphics.update    end    s.dispose  end  #--------------------------------------------------------------------------  # ● 釋放  #--------------------------------------------------------------------------  def dispose    (self.bitmap.dispose) unless (self.bitmap == nil)    @viewport.dispose    @viewport.dispose    super  end  #--------------------------------------------------------------------------  # ● 更改動畫  #--------------------------------------------------------------------------  def id=(int)    @id = int    if id == 0      dispose_loop_animation      return    end    animation = $data_animations[self.id]    loop_animation(animation)  end  #--------------------------------------------------------------------------  # ● 更改可視化  #--------------------------------------------------------------------------  def visible=(bool)    super(bool)    if bool      animation = $data_animations[self.id]      loop_animation(animation)    else      dispose_loop_animation    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          sprite.y = self.viewport.rect.height - 160        else          sprite.x = 320          sprite.y = 240        end      else        sprite.x = self.x - self.ox + self.src_rect.width / 2        sprite.y = self.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      sprite.x += cell_data[i, 1]      sprite.y += cell_data[i, 2]      sprite.z = 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      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  endend复制代码
    复制代码
    技術含量基本上等於零……
    不擅長表達,需要播放多個動畫的人應該知道有甚麽用途==|||
                 本帖来自P1论坛作者禾西,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=84595  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-14 23:18 , Processed in 0.133214 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表