一、帧动画

你能够通过一系列图片文件,像例如以下这样,创建一个动画:
[cpp]  
CCAnimation *animation = CCAnimation::create();  
//从本地文件系统中载入图片文件到CCSpriteFrame中区,然后加入到CCAnimation中  
for (int i = 1; i < 15; i++)  
{  
char szImageFileName[128] = {0};  
sprintf(szImageFileName, "Images/grossini_dance_%02d.png", i);  
animation->addSpriteFrameWithFileName(szImageFileName);    
}  
animation->setDelayPerUnit(2.8f / 14.0f); // 这个动画包括14帧,将会持续2.8秒.  
animation->setRestoreOriginalFrame(true); // 14帧播放完之后返回到第一帧  
CCAnimate *action = CCAnimate::create(animation);  
sprite->runAction(action);  // 执行精灵对象  
注意CCAnimation是由很多精灵帧组成,能够设置间隔时间,持续时间等,它实际上是包括着一组数据。CCAnimate是一个动作,它是通过CCAnimation对象创建。
二、精灵表动画
虽然手工动画非常easy理解,但它非常少用在游戏开发中。相反的,精灵表动画的方式在2D动画中常常使用。
这是一个精灵表。它实际上就是一系列动画帧图片,或者是一个能用于一个场景的图片集。
在OpenGLES1.1阶段,精灵表由于下面几点被广泛应用:
1、降低文件读写时间。读取一张图片比读取一堆小文件肯定要快。
2、降低内存消耗。OpenGL ES 1.1只可以使用2的几次方大小的图片(也就是宽度或者高度是2,4,864,128,256,512,1024,...)。也就是说,OpenGL ES1.1将会分配给每一个图片2的几次方大小的内存空间,即使你这张图片达不到这种宽度和高度也会分配大于此图片的2的n次方大小的空间。那么运用这种图片集的方式将会降低内存碎片。
3、降低OpenGL ES绘制调用而且加速渲染。
Cocos2d-x v2.0升级到了OpenGL ES2.0.OpenGL ES2.0不会再分配2的几次方的内存块了,可是降低读取时间和绘制调用的优势依旧存在。
那么生成的动画效果怎样呢?正如我们所见,精灵表不是动画的一个必须条件。可是考虑到以上的一些优势,精灵表还是非常有效率的。在Cocos2dx中,有很多不同的方式来创建精灵表。
三、通过.png 和 .plist文件创建精灵表
在cocos2dx 0.x和1.x版本号中,CCSpriteSheet就是为以上的目的设计。在V2.0中CCSpriteBatchNode替代了CCSpriteSheet。
CCSpriteBatchNode对象包括了全部精灵帧的图片纹理。即使它不会绘制,你也必需要把它加入到场景中,比如:
[cpp]  
CCSpriteBatchNode* spritebatch = CCSpriteBatchNode::create("animations/grossini.png");  
下一步,你须要运用CCSpriteFrameCache实例来确保帧名字相应帧边界。也就是说,图片在哪一块矩形区域中。比如:
[cpp]  
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();  
cache->addSpriteFramesWithFile("animations/grossini.plist");  
一旦你的精灵表和帧载入完毕,而且精灵表已经被加入到了场景中,你能够通过createWithSpriteFrameName方法来创建精灵。而且通过addChild要加入到精灵表中:
[cpp]  
m_pSprite1 = CCSprite::createWithSpriteFrameName("grossini_dance_01.png");  
spritebatch->addChild(m_pSprite1);  
addChild(spritebatch);  
createWithSpriteFrameName 方法将会从grossini.plist中找到相应的坐标以及矩形区域,之后再裁剪grossini.png的纹理成一个精灵帧。
如今我们创建一个CCArray对象而且天剑全部的帧动画进去。在这个动画的样例中,我们发现全部的14帧都有同样的大小,所以我们能够用一个嵌套的循环遍历它们,而且当完毕加入14帧之后结束掉循环。
[cpp]  
CCArray* animFrames = CCArray::createWithCapacity(15);  
char str[100] = {0};  
for(int i = 1; i < 15; i++)   
{  
sprintf(str, "grossini_dance_%02d.png", i);  
CCSpriteFrame* frame = cache->spriteFrameByName( str );  
animFrames->addObject(frame);  
}  
最后,我们须要创建一个CCAnimate动作实例来执行CCSprite。以下我们能够在CCRepeatForever动作中包裹CCAnimate动作来让它一直执行下去,像这样:
[cpp]  
CCAnimation* animation = CCAnimation::createWithSpriteFrames(animFrames, 0.3f);  
m_pSprite1->runAction( CCRepeatForever::create( CCAnimate::create(animation) ) );  
四、文件动画
CCAnimateCache可以载入一个描写叙述一批节点的xml/plist文件,包含帧名和他们的矩形区域。这个借口很easy使用。
[cpp]  
CCAnimationCache *cache = CCAnimationCache::sharedAnimationCache(); // 缓存在cocos2dx中一直是单例模式  
cache->addAnimationsWithFile("animations/animations-2.plist");  
CCAnimation animation = cache->animationByName("dance_1");  
CCAnimate animate = CCAnimate::create(animation);  
sprite->runAction(animate);  

cocos2dx动画Animation介绍相关推荐

  1. css3动画-animation

    css3动画-animation animation 属性是 8 个属性的简写: 你是否被gif loading加载太慢或有锯齿而感到困扰? 项目中,当页面内容或图片比较多或在加载一些比较大的数据接口 ...

  2. Android Animation学习(六) View Animation介绍

    Android Animation学习(六) View Animation介绍 View Animation View animation系统可以用来执行View上的Tween animation和F ...

  3. 安卓动画全解:补间动画(视图动画)、布局动画、属性动画、逐帧动画。动画Animation属性、Alpha属性、Scale属性、Translate属性、Rotate属性,动画集AnimationSet

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓动画全解:补间动画(视图动画).布局动画.属性动画.逐帧动画. 主要内容包含:动画Animation属性.Alpha属性.Scale属性.Tran ...

  4. 属性动画、帧动画、补间动画的介绍使用及对比

    属性动画.帧动画.补间动画的介绍使用及对比 版权声明:转载必须注明本文转自南轩的博客: http://blog.csdn.net/nanxuan521 在android开发中经常会碰到一些动画需求,其 ...

  5. 动画—Keyframes介绍

    动画-Keyframes介绍 Animation动画 css3为Animation动画提供的几个属性如下: animation-name:指定动画名称,该属性指定一个已有的关键帧定义. animati ...

  6. html animation 属性,CSS3动画属性:动画(animation)

    一:动画(animation)的参数详解 由于上面用到了animation动画,这里详细介绍下这个animation的参数. 简介 CSS动画(Animations)简单说就是在一段固定的动画时间内暗 ...

  7. 精灵动画Animation对话框组成Idle动画的各精灵

    精灵动画Animation对话框组成Idle动画的各精灵 场景中已经添加了精灵,现在是时候让让它动起来了.读者也许已经从精灵图集中,各精灵的命名中看出来了,这个精灵一共有两种动画状态:Idle(空闲) ...

  8. 动画 java_Java动画程序介绍

    Java动画程序介绍 java动画的实现,首先用java.awt包中graphics类的drawimage()方法在屏幕画出图象,然后通过定义一个线程,让该线程睡眠一段时间,到时后再切换成另外一幅图象 ...

  9. Cocos2D-x工程目录介绍

    <Cocos2D-x权威指南>第2章搭建跨平台的开发环境,本章介绍Cocos2D-x的项目在Win32.Android.iOS开发环境中的安装与配置,详细介绍了项目结构以及新建项目和交叉编 ...

最新文章

  1. Java容器类研究4:ArrayList
  2. memcached java 多线程_springboot使用memcache缓存
  3. Dialog外部点击事件
  4. 海康大华RTSP格式
  5. python面对对象编程------3:写集合类的三种方法
  6. python内置函数 pdf_关于Python巧妙而强大的内置函数
  7. java 删除图形界面_Java图形化界面报错?
  8. python模型训练 warm_start_08-06 细分构建机器学习应用程序的流程-训练模型
  9. Eclipse用法和技巧十六:自动添加未实现方法2
  10. client_hello_cb、get_session_cb、servername_cb、cert_cb
  11. android nds模拟器窗口,安卓NDS模拟器drastic模拟器使用经验分享
  12. python ggplot为什么不能取代matplotlib_为什么geom_bar()不会像python ggplot中那样更改填充颜色?...
  13. CMMI3认证过程总结
  14. C语言 分支语句:if 语句和 switch语句
  15. 机房布线的最高境界 | 最后的暗黑系,真是亮瞎眼
  16. 第075封“情书”:百撕不得其解Tearing Cloth<Entagma>Houdini 2018
  17. android代码图片编辑,怎样修改android系统apk软件里面的代码和图片?
  18. 高速USB模式下 UAC2.0
  19. iOS学习笔记38-新浪微博错误代码详解
  20. Codeforces Round 250(Div. 2)

热门文章

  1. linux如何重启syslog服务,Linux syslog服务
  2. mysql maximum idle_MySQL的MaxIdleConns不合理,会变成短连接的原因
  3. HR问我为什么要离开上一家公司钱没给到位,心委屈了。这些归根到底就一条:干得不爽。
  4. 现在web前端的工资怎样?
  5. 幂指函数怎么求极限_函数的极限I
  6. 热电偶校验仪_热电偶校验方法_南昌手持热工校验仪,杭州全功能热工过程校验仪厂家...
  7. pythonlocust使用方法_python locust 性能测试:locust安装和一些参数介绍
  8. python中的readalllines用法_什么是最好的编程语言?(怎样才能爱上编程呢?)
  9. java程序设计自考_java程序设计自考试题
  10. mysql数据库用doc命令_MySQl数据库常用的DOS命令