看了好几天cocos2dx的帧动画,现在才有点眉目,为了高效期间我们一般会用到 精灵帧缓存(CCSpriteFrameCache) 和动画缓存(CCAnimationCache) .大体的操作步骤:

1.把多个帧动画合成一张,然后生成plist文件,plist文件记载着每一帧在大图中的位置信息.

2.通过plist文件把每一帧加载到精灵帧缓存.

CCSpriteFrameCache *frameCache=CCSpriteFrameCache::sharedSpriteFrameCache();
frameCache->addSpriteFramesWithFile("grossini.plist");

3.生成动画.

  生成动画有两种方式:第一种是通过动画帧plist文件,另一种使用精灵帧缓存生成帧数组创建动画.

1)通过动画帧plist文件

//CCAnimationCache::purgeSharedAnimationCache();
CCAnimationCache *animationCache =CCAnimationCache::sharedAnimationCache();
animationCache->addAnimationsWithFile("Animation.plist");
CCAnimation* animation = animationCache->animationByName("Animation");

2)通过精灵帧数组创建动画.

CCArray *animations = CCArray::createWithCapacity();
char str[]={};
for(int i = ; i< ; i++)
{
  sprintf(str,"grossini_dance_%02d.png",i);
  CCSpriteFrame *frame = frameCache->spriteFrameByName(str);
  animations->addObject(frame);
}
CCAnimation* animation = CCAnimation::createWithSpriteFrames(animations,2.0f); //有多个动画时也可以使用CCAnimationCache
 CCAnimationCache::sharedAnimationCache()->addAnimation(animation,"dance"); 
//从缓存中读动画.                                                                                                                                                                   
CCAnimation* danceAnimation = CCAnimationCache::sharedAnimationCache()->animationByName("dance");

4.精灵执行动画

CCAnimate* animate = CCAnimate::create(danceAnimation);
CCSprite* grossini = CCSprite::create();
CCSpriteFrame* frame = frameCache->spriteFrameByName("grossini_dance_01.png");
grossini->setDisplayFrame(frame);
grossini->setPosition(ccp(origin.x+visibleSize.width/,origin.y+visibleSize.height/));
addChild(grossini,);
grossini->runAction(animate);

cocos2dx 帧动画的两种创建方式的更多相关文章

  1. android位移动画的两种实现方式

    在android开发,我们会常常使用到位移动画,普通情况下位移动画有两种实现方式.一种是直接通过java代码去实现,第二种是通过配置文件实现动画,以下是两种动画的基本是用法: 纯Java代码实现: / ...

  2. android旋转动画的两种实现方式

    在android开发,我们会常常使用到旋转动画,普通情况下旋转动画有两种实现方式,一种是直接通过java代码去实现,第二种是通过配置文件实现动画.以下是两种动画的基本是用法: 纯Java代码实现: / ...

  3. 【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  4. String变量的两种创建方式

    在java中,有两种创建String类型变量的方式: String str01="abc";//第一种方式 String str02=new String("abc&qu ...

  5. Android中Fragment的两种创建方式

    fragment是Activity中用户界面的一个行为或者是一部分.你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activity中再使用.你可以认 ...

  6. java多线程总结一:线程的两种创建方式及优劣比较

    1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现 ...

  7. python 多进程的两种创建方式

    Python中使用线程有两种方式:函数或者用类来包装线程对象. 第一种---------函数 菜鸟教程的我没看懂,说说我自己懂的----看视频理解的 import time import thread ...

  8. java多线程总结:线程的两种创建方式及优劣比较

    1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现 ...

  9. java多线程总结一:线程的两种创建方式及比较

    1.线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行.当程序作为一个应 ...

随机推荐

  1. [stm32] MPU6050 HMC5883 Kalman 融合算法移植

    一.卡尔曼滤波九轴融合算法stm32尝试 1.Kalman滤波文件[.h已经封装为结构体] /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronic ...

  2. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结

    Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结 1. 管道抽象 1 2. 层次结构抽象(json,xml etc) 1 3. 异步抽象promise 1 4. Ide ...

  3. 使用gulp进行React任务的构建

    如果你不熟悉gulp的操作,可以看下下面的教程: gulp学习笔记1 gulp学习笔记2 gulp学习笔记3 gulp学习笔记4 对于gulp在react中的构建,找了很多资料,看了很多文章,也根据文 ...

  4. 在VC项目中附加包含目录

    1.VC2010项目中附加包含目录 上图项目中附加了两个文件夹,一个是上级目录下的CommonClass,一个是下级目录下的invengo. 使用这两个目录下的类时直接在include后面写头文件名即 ...

  5. python先序、中序、后序排序

    #encoding=utf-8 class Tree(): def __init__(self,leftjd=0,rightjd=0,data=0): self.leftjd = leftjd sel ...

  6. 隐知识:reloadData 方法之后,view并不会立即更新其contentSize

    在使用UITableView .UICollectionView ,调用reloadData方法之后,并不立即更新其contentSize.原因如下:http://jacksonriver.com/n ...

  7. 转:LIRE的使用

    LIRE的使用:创建索引 LIRE(Lucene Image REtrieval)提供一种的简单方式来创建基于图像特性的Lucene索引.利用该索引就能够构建一个基于内容的图像检索(content- ...

  8. 水星Mercury路由器端口映射设置图文方法

    在一些内网的环境里,你可能需要把自己的内网的WEB服务器或者其他应用服务器设置成通过互联网可以访问,但是在内网我们是通过路由器共享上网的,外网无法访问到我们的内部服务器.那么这就需要我们通过" ...

  9. Oracle的FRA(Flash Recovery Area)的好处

    如果FRA的空间耗尽,只会影响到这个Oracle实例自身.所以不会耗尽所有磁盘空间从而影响到其它的数据库实例或其它应用.

  10. Socket编程基本流程实践

    通讯基本流程图如下所示: Server端代码(ServerDemo.cpp): #include <WinSock2.h> #include <Windows.h> #incl ...