PixiJS学习(9)动画序列帧

简介

        序列帧动画是一种常见的动画形式之一,其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放从而形成动画。

        用简单的话来说,就是一直在替换图片内容,在人眼的视觉感受中好像是连续在播放,就像那种“小人书”,进行翻动的时候就是一段连续的动画在播放。

        就像下面的这个GIF图片一样,也可以做成序列帧的方式。

素材需求

序列帧图片:

        一般需要实现序列帧的动画都是稍微比较复杂的动画,会有一些形变,不是单纯简单的刚体的动画,像一个物体简单的平移旋转效果直接用 CSS3 的动画熟悉就可以了。因此复杂的动画需要设计师提前提供出一些动画序列帧图片。

        一般的序列帧图片会提供尺寸大小一致的图片。可以是 JPG 也可以是 PNG 图片。下面就是上述动画提供的原始图片。

原始图片
合成的雪碧图

处理图片:

        在 PixiJs 中使用序列帧,在序列帧图片比较多的情况下可以将图片打包成雪碧图,这样进行处理,可以优化性能,节省开销。

        常用的打包工具是 TexturePacker - Create Sprite Sheets for your game!

        如果不进行处理,一张张的图片处理也是可以的。

一张一张图片的序列帧

        在 PixiJs 中使用一张张图片制作序列帧,是比较简单的。只需要加载这些图片纹理,将纹理添加到一个数组里面,再使用 AnimatedSprite 动画精灵这个类即可控制它的播放。

// 组装纹理
let array = [];
for (let i = 0; i < 62; i++) {
  array.push(resources[`A000${i>9?i:'0'+i}`].texture);
}

// 创建一个动画序列帧
let animatedSprite = new PIXI.AnimatedSprite(array);
// 设置位置
animatedSprite.x = 0;
animatedSprite.y = 0;
animatedSprite.animationSpeed = 0.2; // 动画播放的速度,默认为1,每秒播放60张图片
animatedSprite.loop = true; // 动画是否循环
animatedSprite.onComplete = () => {
  console.log("播放完成");
}; // 动画完成的回调函数
animatedSprite.gotoAndPlay(0); // 从第几帧开始播放
this.frameStage.stage.addChild(animatedSprite);

雪碧图序列帧

        在序列帧动画帧数比较多的情况下,页面加载还需要兼顾性能的情况下,我们可以考虑使用加载雪碧图的方式,来实现素材的加载。

// 收集加载完成的图片纹理
let textures = Object.assign(resources.cat.textures);

// 组装纹理
let array = [];
Object.keys(textures).sort().forEach((key) => {
  array.push(textures[key]);
});

// 创建一个动画序列帧
let animatedSprite = new PIXI.AnimatedSprite(array);
animatedSprite.x = 0;
animatedSprite.y = 0;
animatedSprite.animationSpeed = 0.2; // 动画播放的速度,默认为1,每秒播放60张图片
animatedSprite.loop = true; // 动画是否循环
animatedSprite.onComplete = () => {
  console.log("播放完成");
}; // 动画完成的回调函数
animatedSprite.gotoAndPlay(0); // 从第几帧开始播放
this.frameStage.stage.addChild(animatedSprite);

        其实使用雪碧图和一张张加载序列帧,从技术实现的角度来看,没有多少区别。但是从实际资源优化的角度来说看确实有很多提升。

注意事项:

序列帧的播放在实际的生产过程中,可能会遇到很多的问题。下面有几个比较常见的问题:

  • 序列帧素材过大的问题,可以通过删帧(间隔删除)、批量缩放的方式处理;
  • 序列帧比较模糊的问题,需要查看原图尺寸以及 canvas 像素是否符合需求;
  • 播放过程有跳帧的现象出现,素材本身连续性的问题,以及硬件 cpu 的问题;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于学习 PixiJS 和 Three.js 的资料,以下是一些推荐的资源: PixiJS: 1. 官方文档:PixiJS 官方网站提供了详细的文档,包含了教程、示例和 API 参考。你可以在这里找到所有需要的信息:https://pixijs.io/documentation/ 2. PixiJS 学习路径:CSDN 上有一个名为 "Pixi.js 实战教程" 的系列文章,涵盖了从入门到进阶的内容。你可以在这里找到相关的教程:https://blog.csdn.net/column/details/25287.html 3. Github 示例项目:PixiJS 的官方 Github 存储库中有一些示例项目,可以帮助你学习和理解 PixiJS 的使用。你可以在这里找到这些示例:https://github.com/pixijs/examples Three.js: 1. 官方文档:Three.js 官方网站提供了详细的文档,包含了教程、示例和 API 参考。你可以在这里找到所有需要的信息:https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene 2. Three.js 学习路径:CSDN 上也有一个名为 "Three.js 实战教程" 的系列文章,涵盖了从入门到进阶的内容。你可以在这里找到相关的教程:https://blog.csdn.net/column/details/25288.html 3. Github 示例项目:Three.js 的官方 Github 存储库中有一些示例项目,可以帮助你学习和理解 Three.js 的使用。你可以在这里找到这些示例:https://github.com/mrdoob/three.js/tree/dev/examples 希望这些资源能帮助你开始学习 PixiJS 和 Three.js!如果有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻蝶Love

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值