简单介绍



Cocos2d-x中。动画的详细内容是依靠精灵显示出来的,为了显示动态图片,我们须要不停切换精灵显示的内容。通过把静态的精灵变为动画播放器从而实现动画效果。

动画由帧组成,每一帧都是一个纹理,我们能够使用一个纹理序列来创建动画。



我们使用Animation类描写叙述一个动画,而精灵显示动画的动作则是一个Animate对象。

动画动作Animate是精灵显示动画的动作。它由一个动画对象创建,并由精灵运行。

创建方法



- 手动加入序列帧到Animation类

- 使用文件初始化Animation类



手动加入



手动加入的方法须要将每一帧要显示的精灵有序加入到Animation类中。并设置每帧的播放时间,让动画可以匀速播放。另外。还要通过`setRestoreOriginalFrame`来设置是否在动画播放结束后恢复到第一帧。创建好Animation实例后。须要创建一个Animate实例来播放序列帧动画。

复制代码

  1. auto animation = Animation::create();
  2. for( int i=1;i<15;i++)
  3. {
  4. char szName[100] = {0};
  5. sprintf(szName, "Images/grossini_dance_%02d.png", i);
  6. animation->addSpriteFrameWithFile(szName);
  7. }
  8. // should last 2.8 seconds. And there are 14 frames.
  9. animation->setDelayPerUnit(2.8f / 14.0f);
  10. animation->setRestoreOriginalFrame(true);
  11. auto action = Animate::create(animation);
  12. _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实例来播放序列帧动画。

复制代码

  1. auto cache = AnimationCache::getInstance();
  2. cache->addAnimationsWithFile("animations/animations-2.plist");
  3. auto animation2 = cache->getAnimation("dance_1");
  4. auto action2 = Animate::create(animation2);
  5. _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),获得事先存入的动画



`建议:`在内存警告时我们应该增加例如以下的清理缓存操作:

复制代码

  1. void releaseCaches()
  2. {
  3. AnimationCache::destroyInstance();
  4. SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();
  5. TextureCache::getInstance()->removeUnuserdTextures();
  6. }

值得注意的是清理的顺序,我们推荐先清理动画缓存。然后清理精[灵帧缓存](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)。

依照引用层级由高到低。以保证释放引用有效。

[Cocos2d-x v3.x]序列帧动画的更多相关文章

  1. cocos2d-x 2.0 序列帧动画 深入分析

    转自:http://blog.csdn.net/honghaier/article/details/8222401 序列帧动画主要有几个类: CCSpriteFrame:精灵帧信息,序列帧动画是依靠多 ...

  2. 时光煮雨 Unity3D实现2D人物动画① UGUI&Native2D序列帧动画

    系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...

  3. iOS-动画效果(首尾式动画,代码快动画,核心动画,序列帧动画)

    一.各个动画的优缺点 1.首尾动画:如果只是修改空间的属性,使用首尾动画比较方便,如果在动画结束后做后续处理,就不是那么方面了. 2.核心动画:有点在于对后续的处理方便. 3.块动画: (1)在实际的 ...

  4. Unity3d的序列帧动画

    马上这星期就要过去了,为了完成每星期写一篇博客的目标,熬夜也要写完. 最近项目中用到了很多序列帧动画,之前看教程也接触过序列帧动画,但当时没用到,就没仔细研究,这次就借着这个机会好好总结一下序列帧动画 ...

  5. (二)plist的使用和序列帧动画

    六.plist的使用方法: iOS的程序在安装在手机上以后会把全部资源文件集成在一个文件夹中,这种文件集合称为bundle,对于一般的工程,只有一个bundle,即mainbundle,因此可以通过b ...

  6. iOS开发基础-序列帧动画之Tom猫

    新建一个Single View Application,向该工程中导入Tom猫的图片资源,本示例演示Tom猫喝牛奶的动作.图片的名字为 drink_00.jpg.drink_01.jpg.....dr ...

  7. Unity Shader序列帧动画学习笔记

    Unity Shader序列帧动画学习笔记 关于无限播放序列帧动画的一点问题 在学shader的序列帧动画时,书上写了这样一段代码: fixed4 frag(v2f i){ // 获得整数时间 flo ...

  8. UnityShader 序列帧动画效果

    实现原理:主要思想是设置显示uv纹理的大小,并逐帧修改图片的uv坐标. 实现步骤 1.我们首先用_Time.y和速度属性_Speed相乘得到模拟的时间. 2.然后我们用time除以_Horizonta ...

  9. (转)NGUI系列教程七(序列帧动画UITexture 和 UIsprit)

    NGUI系列教程七(序列帧动画)   今天我给大家讲一下如何使用NGUI做序列帧动画.本节主要包括两方面内容,分别是使用UIspirit和使用UITexture 做序列帧动画.废话不说了,下面开始.还 ...

随机推荐

  1. Config配置文件读写

    config文件读写操作(文字说明附加在程序中) App.config文件 <?xml version="1.0" encoding="utf-8" ?& ...

  2. css元素居中

    水平居中 若为行内元素,对其父元素用text-align:center即可: 若为块元素(无浮动),则一般有两种方法可实现对其的水平居中,一为margin:0 auto;二为通过css计算函数calc ...

  3. php和java静态变量用途的思考

    静态变量有哪些用途? 比如创建单例对象. 统计访问次数.数量等等. 多线路和进程中可能会使用. 深入理解补充.... PHP 单例模式解析和实战 php设计模式——单例模式 php static 与 ...

  4. Android Translate 动画跳跃和缓慢移动

    1.动画跳跃:在动画结束的时候设置位置 Animation.AnimationListener listener = new Animation.AnimationListener() { @Over ...

  5. Redhat Enterprise 5.4下安装配置Oracle 11g R2详细过程

    1.Linux环境配置准备 环境:Linux:Redhat Enterprise 5.4,DB:Oracle 11g R2 X64,Oracle安装到/home/oralce_11目录下. 配置过程如 ...

  6. 关于List、Set集合以及Map的使用

    package tingjizifu; import java.util.*; public class TongJi { /* * 使用Scanner从控制台读取一个字符串,统计字符串中每个字符出现 ...

  7. 电机KV值对应的桨

    KV2200 -6寸 KV1400 -8寸 KV1000 -10寸

  8. :after伪类+content内容生成经典应用举例

    一.简单说说content内容生成 content内容生成就是通过content属性生成内容,content属性早在CSS2.1的时候就被引入了,可以使用:before以及:after伪元素生成内容. ...

  9. Input File 表单上传按钮美化

    HTML <div class="input-file-button"> 上传图片<input type="file" class=" ...

  10. iOS-OC命名规范

    IOS开发(OC)中的命名规范 正文:通过读写大量代码我有自己的一套编程思路和习惯,自认为自己的编码习惯还是不错的,代码结构也算清晰,因为我一直以来都是代码看的多写的多,但是总结的比较少,知识经常不成 ...