一、帧动画

你能够通过一系列图片文件,像例如以下这样,创建一个动画:
[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. 【Unity入门】场景、游戏物体和组件的概念

    版权声明:本文为博主原创文章,转载请注明出处. 游戏和电影一样,是通过每一个镜头的串联来实现的,而这样的镜头我们称之为“场景”.一个游戏一般包含一个到多个场景,这些场景里面实现了不同的功能,把它们组合 ...

  2. Apriori算法例子

    1 Apriori介绍 Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集.首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然 ...

  3. Visual Basic相关图书推荐

    Visual Basic从入门到精通(第2版) 作      者 国家863中部软件孵化器 编 出 版 社 人民邮电出版社 出版时间 2015-03-01 版      次 2 页      数 61 ...

  4. mysql 语句碎片

    1. find_in_set('''$ip''',CONCAT('''', REPLACE( REPLACE(w_ip,',',''',''') ,'-',''',''') 2. grant all ...

  5. Linux系统github使用

    命令行下使用: 1.检查ssh key cd ~/.ssh 如果提示"No such file or directory",则需要创建一个ssh key. 2.创建ssh key. ...

  6. windows分屏

    一.准备 主机.显示屏A.显示屏B.DVI连接线2根 二.操作步骤 1.使用DVI连接线将显示屏A连接到主机上,开机进入windows系统(演示用的是win 7)(若已连接,请跳到第2步.基本上这一步 ...

  7. Module compiled with Swift 3.0 cannot be imported in Swift 3.0.1

    Cartfile:github "SwiftyJSON/SwiftyJSON"got error:Module compiled with Swift 3.0 cannot be ...

  8. JavaScript 变量、作用域及内存详解

    基本类型值有:undefined,NUll,Boolean,Number和String,这些类型分别在内存中占有固定的大小空间,他们的值保存在栈空间,我们通过按值来访问的. (1)值类型:数值.布尔值 ...

  9. 第一百九十二天 how can I 坚持

    早上去中关村森林公园跑了会步,下午看了部电影<夏洛特烦恼>,感觉电影跟我看的那部小说差不多,还是挺不错的. 睡觉.

  10. 第二百二十九天 how can I 坚持

    百度-让人更容易的获取信息,腾讯-让人更方便的交流,阿里-让人更方便的消费,每个公司都有自己的使命,每个公司的使命都是围绕着人. 创新-其实应该是在每个人的内心深处都或多或少有一些新的想法,但是什么是 ...