本文仅供个人记录和复习,不用于其他用途
与动画相关的类
Animation
,存储动画相关信息AnimationCache
,动画缓存AnimationFrame
,动画帧Animate
,动画动作SpriteFrame
,精灵帧SpriteFrameCache
,精灵帧缓存
3.0版本的改变
- 去掉
CC
- 单例改为
getInstance()
,销毁单例改为destoryInstance()
createWithSpriteFrames()
中的CCArray
参数改为Vector
的SpriteFrame
指针的引用create()
、setFrames()
、getFrames()
中的CCArray
参数改为Vector
的AnimationFrame
指针的引用addSpriteFrameWithFileName()
改为addSpriteFrameWithFile()
动画帧
所谓的动画帧,就是在精灵帧的基础上,设置每帧之间的间隔帧数。
|
|
创建一个数组,将图片加载入精灵帧缓存,同时创建动画帧,使用精灵帧初始化动画帧,设置每帧之间间隔帧数,最后将动画帧加入到数组。无论是动画帧还是精灵帧(实际上动画帧就是精灵帧,精灵帧的内部创建的动画帧间隔为1),一般来讲都是先载入缓存,随后加入到数组中,然后对Animation
类进行初始化。
Animation类实例化
Animation
类的初始化大致有下述三种方法,分别是创建空动画、使用精灵帧创建、使用动画帧创建对象。
|
|
关于如何添加动画帧,有以下四种方法:
|
|
下面介绍一下其他的属性设置:
|
|
Animate类
事实上,光有动画不行,必须有动画动作来执行它:
|
|
这里是让一个精灵来执行动画动作,注意,一般来讲要将精灵设置为动画的第一张图。
具体实现
我们可以直接添加所有图片来创建动画:
|
|
如果精灵帧的话,只需要更改添加资源的步骤以及单位帧间隔:
|
|
使用动画帧其实就是用精灵帧初始化而已:
|
|
最后效果
如果没问题的话,就能看见小僵尸在愉快的啃空气→_→
注意事项
这里讲一个内存优化的知识,我们知道,将一张.plist
的大图加载进入缓存时,图片越大,那么消耗的资源越多。让我们先看看下面这张图片:
我们可以看到,这张图片有很多空白的地方被浪费了。于是有人可能会问,能不能这么做呢:
确实,如果按照图中箭头方向进行裁剪,图片无疑被大大的缩小了。但是,这张图片是用TexturePacker软件做出来的,难道这个软件有错误的地方吗?很显然不是,因为TexturePacker这么做是为了符合Cocosdx的要求。
事实上,Cocos底层加载.plist
文件时,规格都是用的2的n次方。比如我们之前用到的僵尸图片,就是256×512,而这个植物的图片则是256×256。举个例子,如果长和宽为256时无法摆放所有精灵,那么就会尝试长为512的情况。如果还不行,那么就尝试长和宽都为512。这样一来,图片就大了不少。当精灵越多,图片越大时,经常发生这种状况。哪怕你的精灵只多了一个,但只要无法放下,那么就会尝试下一级。我们知道,2的n次方成指数型增长,越到后面数字变化越大,对于内存的消耗自然不用说。因此,我们在制作图片时,应当考虑到这些问题。