PixiJS学习(9)动画序列帧
简介
帧动画是一种常见的动画形式,其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。
用简单的话来说,就是一直在替换图片,在人视觉的感受中好像是连续在播放,就像那种“小人书”,进行翻动的时候好像是一段连续的动画在播放。
就像下面的这个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)动画序列帧相关推荐
- 【游戏开发实战】使用Unity制作像天天酷跑一样的跑酷游戏——第一篇:人物动画序列帧
文章目录 一.前言 二.创建工程 三.导入序列帧图片素材 四.设置图片格式 五.切割序列帧 六.制作序列帧动画 七.运行效果 一.前言 嗨,大家好,我是新发,今天是大年初一,大家牛年快乐,牛气冲天. ...
- iOS学习——核心动画之Layer基础
iOS学习--核心动画之Layer基础 1.CALayer是什么? CALayer我们又称它叫做层.在每个UIView内部都有一个layer这样一个属性,UIView之所以能够显示,就是因为它里面有这 ...
- 学习UE4动画蓝图:实现双脚贴地
目标 在上一篇博客<学习UE4动画蓝图:配置脚部IK>中,IK功能解决了"脚部陷入地下"的问题,但是还是有"脚部悬空"的问题.<[UE4蓝图] ...
- 系统学习iOS动画之六:3D动画
本文是我学习<iOS Animations by Tutorials> 笔记中的一篇. 文中详细代码都放在我的Github上 andyRon/LearniOSAnimations. 到目前 ...
- kotlin设置按钮不可点击_3dmax渲染720全景效果图动画流程,学习VR动画不可错过的必备知识...
3dmax渲染720全景效果图动画流程,学习VR动画不可错过的必备知识 7 20全景效果图是这几年全国兴起的一门小技术,是适应快速.立体.多方位看图的一个重要方法.今天我就来说一下,制作720全景动画 ...
- [0 to 0.5]从零开始学习Android动画知识(下)
[0 to 0.5]从零开始学习Android动画知识(下) 矢量动画(Scalable Vector Graphics) 不同于前面的为控件做动画效果的方法,矢量动画则是为图形做出动画效果 矢量图 ...
- 如何高效的学习Android动画
前言 本篇文章就是在知乎回答的一个问题,这里记录下,以后看到我博客的朋友也可以看到. 曾经也同楼主一样,对Android中的动画不是很清楚,什么帧,Tween,属性等等,很多知识,也很琐碎,后来觉得动 ...
- 高效学习Android动画
当时系统学习Android动画还有一部分原因:将来成为一个android组件开发工程师,如果想做出一些高性能,nice的动画就必须对动画的基础知识有深入的理解,因此就打算系统的学习一下.经过一段时间的 ...
- 系统学习iOS动画之七:其它类型的动画
本文是我学习<iOS Animations by Tutorials> 笔记中的一篇. 文中详细代码都放在我的Github上 andyRon/LearniOSAnimations. 前面学 ...
- [0 to 0.5]从零开始学习Android动画知识(中)
[0 to 0.5]从零开始学习Android动画知识(中) 属性动画(Property Animation) 属性动画(Property Animation)是在 Android 3.0(API 1 ...
最新文章
- H3核心板开发笔记(一):编译及烧写方式
- 【bzoj4318】OSU! 期望dp
- 43request对象 续
- 图论算法(六)-- 二分图的最大分配问题(JAVA)
- Java基础学习总结(34)——HTTP协议详解
- 我查这么多数据,会不会把数据库内存打爆?
- 移远ec20型号区别_移远的EC20 4G模块
- uniapp使用阿里icon详细步骤
- 【思维 | 图论 | 高斯消元】所罗门王的宝藏
- python自动视频剪辑_python剪切视频与合并视频的实现
- HTML背景带视频的个人炫酷引导页源码
- 开源解决方案搭建统一日志平台
- mybatis批量插入 动态赋值某一列,其他列为固定值
- 致美网页练习完整代码
- Frameworks Brightness
- document.getElementByTagName的用法
- vue路由、无痕浏览和nodeJS环境搭建、ElementUI简介
- Quartus II SignalTap使用
- BCB 与 WTL (二)
- MPU6050杨桃电子代码