一、帧动画

你能够通过一系列图片文件,像例如以下这样,创建一个动画:
[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. 四、cocos2dx动画Animation介绍

    qinning199原创,欢迎转载,转载请注明:http://www.cocos2dx.net/?p=22 一.帧动画 你可以通过一系列图片文件,像如下这样,创建一个动画: CCAnimation * ...

  2. [Cocos2d-x开发问题-3] cocos2dx动画Animation介绍

    Cocos2d-x为了减少开发难度,对于动画的实现採用的帧动画的方案.这也就是说Cocos2d-x中的动画是帧动画. 帧动画的原理相信大家都不陌生,就是多张图片循环播放以实现动画的效果. 一个简单的动 ...

  3. android Animation介绍

    Animation介绍: 在Android SDK介绍了2种Animation模式: 1. Tween Animation:间动画,通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果,即 ...

  4. 动画animation的三个应用(漂浮的白云、旋转的星球、正方体合成)

    × 目录 [1]漂浮的白云 [2]旋转的星球 [3]正方体合成 前面的话 前面介绍过动画animation的详细用法,本文主要介绍动画animation的三个效果 漂浮的白云 [效果演示] [简要介绍 ...

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

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

  6. Android 动画animation 深入分析

    转载请注明出处:http://blog.csdn.net/farmer_cc/article/details/18259117 Android 动画animation 深入分析 前言:本文试图通过分析 ...

  7. CSS3动画属性:动画(animation)

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

  8. 【转】cocos2d-x动画加速与减速

    移步原帖传送门:cocos2d-x动画加速与减速 动画是游戏的必然要素之一,在整个游戏过程中,又有着加速.减速动画的需求.以塔防为例子,布塔的时候希望能够将游戏减速,布好塔后,则希望能将游戏加速:当某 ...

  9. Android动画之旅-Android动画基本介绍

    在上一篇博客中.我们简单了解了在Android中的动画特效.小伙伴们是不是意犹未尽呀. 还没有看的猛戳这里:Android动画之旅一开篇动画简单介绍 本篇博客.将和大家一起来分析Android中的四大 ...

随机推荐

  1. 关于Cygwin的x-Server的自动运行以及相关脚本修改

    常常需要用到远端服务器的图形工具,如果在windows端没用xserver的话,很多程序无法运行.一个特殊的例子,emacs在没用xserver的时候,是直接在终端中打开的,如果不修改cygwin.b ...

  2. n个数的最小公倍数

    Description 求n个数的最小公倍数.   Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数.   Output 为每组测试数据输出它们的最小公倍数,每个测 ...

  3. CString类Format()的用法 .xml

    pre{ line-height:1; color:#9f1d66; background-color:#f0f0f0; font-size:16px;}.sysFunc{color:#5d57ff; ...

  4. bzoj1251 序列终结者(splay)

    人生第一发splay,写得巨丑,最后忘记了push_down以后要将子节点maintain 9k代码不忍直视 #define NDEBUG #include<cstdio> #includ ...

  5. win7中protel99添加元件库

    protel打开时默认添加Miscellaneous Devices.lib,点击ADD/REMOVE按钮添加所需要的库时,弹出“文件无法识别”. 点击面板右下方“FIND”按钮,弹出如下对话框时不要 ...

  6. DataGrid Column Group (合并表头)

    <thead> <tr> <th colspan=">swjg</th> <th colspan=">swbm</ ...

  7. Cocos2d-x项目移植到WinRT/Win8小记

    Cocos2d-x项目移植到WinRT/Win8小记 作者: K.C. 日期: 11/17/2013 Date: 2013-11-17 23:33 Title: Cocos2d-x项目移植到WinRT ...

  8. 【Visual Studio2010】创建XAML分析插件

    最近项目[Silverlight]中的需要实现国际化,需要对所有控件进行一个处理.由于使用了Telerik的控件,只需要去掉原有的Label或者Header属性,然后添加一个资源Key即可.但是在项目 ...

  9. HTML5每日一练之progress标签的应用

    progress标签:从名字上来看,估计大家也能猜到这个标签是什么标签了,没错,他是一个进度条.在HTML5中我们终于可以不用模拟了. <progress id="W3Cfuns_pr ...

  10. 埃氏筛法(快速筛选n以内素数的个数)

    给你一个数n,请问n以内有多少个素数?(n <= 10e7) 一般来说,要是对一个整数进行素数判断,首先想到的是写个函数判断是否为素数,然后调用这个函数,时间复杂度为O(n^(½)),但是要求n ...