简单介绍
Cocos2d-x中。动画的详细内容是依靠精灵显示出来的,为了显示动态图片,咱们需要不停切换精灵显示的内容。经过把静态的精灵变为动画播放器从而实现动画效果。动画由帧组成,每一帧都是一个纹理,咱们可以使用一个纹理序列来建立动画。
咱们使用Animation类描写叙述一个动画,而精灵显示动画的动做则是一个Animate对象。git
动画动做Animate是精灵显示动画的动做。它由一个动画对象建立,并由精灵运行。github
建立方法
- 手动加入序列帧到Animation类
- 使用文件初始化Animation类
手动加入
手动加入的方法需要将每一帧要显示的精灵有序加入到Animation类中。并设置每帧的播放时间,让动画能够匀速播放。另外。还要经过`setRestoreOriginalFrame`来设置是否在动画播放结束后恢复到第一帧。建立好Animation实例后。需要建立一个Animate实例来播放序列帧动画。数组
复制代码
- auto animation = Animation::create();
- for( int i=1;i<15;i++)
- {
- char szName[100] = {0};
- sprintf(szName, "Images/grossini_dance_%02d.png", i);
- animation->addSpriteFrameWithFile(szName);
- }
- // should last 2.8 seconds. And there are 14 frames.
- animation->setDelayPerUnit(2.8f / 14.0f);
- animation->setRestoreOriginalFrame(true);
-
- auto action = Animate::create(animation);
- _grossini->runAction(Sequence::create(action, action->reverse(), NULL));
|
在建立Animation实例时会用到下面几个接口:
- `addSpriteFrame`,加入精灵帧到Animation实例
- `setDelayUnits`。设置每一帧持续时间,以秒为单位
- `setRestoreOriginalFrame`,设置是否在动画播放结束后恢复到第一帧
- `clone`。克隆一个该Animation实例
文件加入
首先咱们来了解下需要用到的AnimationCache类。AnimationCache可以载入xml/plist文件,plist文件中保存了组成动画的相关信息,经过该类获取到plist文件中的动画。缓存
在使用AnimationCache类时会用到下面几个接口:
- `addAnimationsWithFile`。加入动画文件到缓存,plist文件
- `getAnimation`,从缓存中获取动画对象
- `getInstance`。获取动画缓存实例对象
使用文件加入的方法仅仅需将建立好的plist文件加入到动画缓存里面。plist文件中包括了序列帧的相关信息。动画
再用动画缓存初始化Animation实例,用Animate实例来播放序列帧动画。
url
复制代码
- auto cache = AnimationCache::getInstance();
- cache->addAnimationsWithFile("animations/animations-2.plist");
- auto animation2 = cache->getAnimation("dance_1");
-
- auto action2 = Animate::create(animation2);
- _tamara->runAction(Sequence::create(action2, action2->reverse(), NULL));
|
`注意:`3.0開始。Cocos2d-x使用getInstance来获取单例实例。
动画缓存(AnimationCache)
一般状况下,对于一个精灵动画。每次建立时都需要载入精灵帧,按顺序加入到数组,再建立相应动做类,这是一个很烦琐的计算过程。对于使用频率高的动画。比方走路动画。将其加入缓存可以有效减小每次建立的巨大消耗。由于这个类的目的和缓存内容都很easy直接。因此其接口也是最简单了的。例如如下所看到的:
- static AnimationCache* getInstance(),全局共享的单例
- void addAnimation(Animation *animation, const std::string& name),加入一个动画到缓存
- void addAnimationsWithFile(const std::string& plist)。加入动画文件到缓存
- void removeAnimation(const std::string& name),移除一个指定的动画
- Animation* getAnimation(const std::string& name),得到事先存入的动画
`建议:`在内存警告时咱们应该增长例如如下的清理缓存操做:
spa
复制代码
- void releaseCaches()
- {
- AnimationCache::destroyInstance();
-
- SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();
-
- TextureCache::getInstance()->removeUnuserdTextures();
- }
|
值得注意的是清理的顺序,咱们推荐先清理动画缓存。而后清理精[灵帧缓存](https://github.com/chukong/cocos-docs/blob/master/manual/framework/native/v3/spriteframe-cache/zh.md),最后是[纹理缓存](https://github.com/chukong/cocos-docs/blob/master/manual/framework/native/v3/texture-cache/zh.md)。依照引用层级由高到低。以保证释放引用有效。 code