简介

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

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

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

素材需求

序列帧图片:

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

一般的序列帧图片会是PNG的透明图片。

处理图片:

在 PIXI 中使用序列帧,在序列帧图片比较多的情况下需要将图片打包成雪碧图的形式,进行处理,这样可以优化性能,节省开销。常用的打包工具是 https://www.codeandweb.com/texturepacker

如果不打包成雪碧图,一张张的图片处理也是可以的。

一张一张图片的序列帧

在 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 像素是否 ok ;
  • 播放过程有调整的现象出现,素材本身的问题,以及 cpu 的问题;

PixiJS学习(9)动画序列帧相关推荐

  1. 【游戏开发实战】使用Unity制作像天天酷跑一样的跑酷游戏——第一篇:人物动画序列帧

    文章目录 一.前言 二.创建工程 三.导入序列帧图片素材 四.设置图片格式 五.切割序列帧 六.制作序列帧动画 七.运行效果 一.前言 嗨,大家好,我是新发,今天是大年初一,大家牛年快乐,牛气冲天. ...

  2. iOS学习——核心动画之Layer基础

    iOS学习--核心动画之Layer基础 1.CALayer是什么? CALayer我们又称它叫做层.在每个UIView内部都有一个layer这样一个属性,UIView之所以能够显示,就是因为它里面有这 ...

  3. 学习UE4动画蓝图:实现双脚贴地

    目标 在上一篇博客<学习UE4动画蓝图:配置脚部IK>中,IK功能解决了"脚部陷入地下"的问题,但是还是有"脚部悬空"的问题.<[UE4蓝图] ...

  4. 系统学习iOS动画之六:3D动画

    本文是我学习<iOS Animations by Tutorials> 笔记中的一篇. 文中详细代码都放在我的Github上 andyRon/LearniOSAnimations. 到目前 ...

  5. kotlin设置按钮不可点击_3dmax渲染720全景效果图动画流程,学习VR动画不可错过的必备知识...

    3dmax渲染720全景效果图动画流程,学习VR动画不可错过的必备知识 7 20全景效果图是这几年全国兴起的一门小技术,是适应快速.立体.多方位看图的一个重要方法.今天我就来说一下,制作720全景动画 ...

  6. [0 to 0.5]从零开始学习Android动画知识(下)

    [0 to 0.5]从零开始学习Android动画知识(下) 矢量动画(Scalable Vector Graphics) 不同于前面的为控件做动画效果的方法,矢量动画则是为图形做出动画效果 矢量图 ...

  7. 如何高效的学习Android动画

    前言 本篇文章就是在知乎回答的一个问题,这里记录下,以后看到我博客的朋友也可以看到. 曾经也同楼主一样,对Android中的动画不是很清楚,什么帧,Tween,属性等等,很多知识,也很琐碎,后来觉得动 ...

  8. 高效学习Android动画

    当时系统学习Android动画还有一部分原因:将来成为一个android组件开发工程师,如果想做出一些高性能,nice的动画就必须对动画的基础知识有深入的理解,因此就打算系统的学习一下.经过一段时间的 ...

  9. 系统学习iOS动画之七:其它类型的动画

    本文是我学习<iOS Animations by Tutorials> 笔记中的一篇. 文中详细代码都放在我的Github上 andyRon/LearniOSAnimations. 前面学 ...

  10. [0 to 0.5]从零开始学习Android动画知识(中)

    [0 to 0.5]从零开始学习Android动画知识(中) 属性动画(Property Animation) 属性动画(Property Animation)是在 Android 3.0(API 1 ...

最新文章

  1. H3核心板开发笔记(一):编译及烧写方式
  2. 【bzoj4318】OSU! 期望dp
  3. 43request对象 续
  4. 图论算法(六)-- 二分图的最大分配问题(JAVA)
  5. Java基础学习总结(34)——HTTP协议详解
  6. 我查这么多数据,会不会把数据库内存打爆?
  7. 移远ec20型号区别_移远的EC20 4G模块
  8. uniapp使用阿里icon详细步骤
  9. 【思维 | 图论 | 高斯消元】所罗门王的宝藏
  10. python自动视频剪辑_python剪切视频与合并视频的实现
  11. HTML背景带视频的个人炫酷引导页源码
  12. 开源解决方案搭建统一日志平台
  13. mybatis批量插入 动态赋值某一列,其他列为固定值
  14. 致美网页练习完整代码
  15. Frameworks Brightness
  16. document.getElementByTagName的用法
  17. vue路由、无痕浏览和nodeJS环境搭建、ElementUI简介
  18. Quartus II SignalTap使用
  19. BCB 与 WTL (二)
  20. MPU6050杨桃电子代码

热门文章

  1. 三菱PLC-GXWorks2程序下载
  2. 微信小游戏(打飞机1)
  3. 仿微信打飞机小游戏GamePlane(1)----概述
  4. 网络信息安全基本属性
  5. 计算机专业高程课,ArcGIS之数字高程(DEM)分析综合系列套餐
  6. 【软件自动化测试】基于自设网站的软件测试与分析
  7. 2022年计算机软件水平考试数据库系统工程师(中级)练习题及答案
  8. 2020年数据库系统工程师下午真题及答案解析
  9. Veritas Backup Exec 21配置存储
  10. win10搭建无盘服务器配置,win10系统无盘安装教程