我们今天来学习cocos2dX里面的动画的制作, 有人说, 不是前面CCAction已经学过了吗? 怎么还要学, CCAction是动作, 而我们今天要学的是动画哦, 是让一个东西动起来哦, 好了进入今天的正题CCAnimation/CCAnimate, 我们知道, 动画看起来是在动的不是由于动画本身在动, 而是由于我们高速切换图片, 由于我们的视觉有一个残留的效果,
所以看起来就像是在动一样, 

先准备一堆素材, 开个玩笑啦, 实际开发过程中, 没有人会弄一大堆素材放在那里, 我们今天准备了两种素材, 先来看看吧

一种是密密麻麻的带有配置文件的, 一种是每一帧都是同样大小的序列帧, 在这里我们推荐大家使用第一种, 由于第一种最大限度的使用了空间, 能在一张同样大小的图片上显示很多其它的资源, 加载游戏的时候能够节省内存(毕竟手机的内存还没达到电脑的水准), 另一个原因是操作起来比較方便, 加到缓存里面后直接用名字就能取出来, 而不像第二个还要计算位置, 我们这里打包工具使用的是 "红孩儿工具箱" , 当然, 大家也能够使用 "texturepacker", 详细的就不细说了, 赶快进入正题:

我们先来看看使用方法:

CCAnimation::create();

CCAnimation::createWithSpriteFrames( 帧数组, 每帧之间的间隔);//储存帧信息

CCAnimate::create( CCAnimation对象); //依据CCAnimation不断地切换精灵帧, 形成动画效果

setDelayPerUnit();                             //设置帧间隔时间

setRestoreOriginalFrame( bool);      //动画播放完之后会不会回到第一帧

setLoops();                                          //循环次数(-1为无限循环)

setFrames( 帧数组);                            //设置动画帧数组

在写代码之前我们先来看看这个配置文件:

我们能够看到, 我们每张小图都有一个相应的信息, 不用我们自己去取位置

好了, 写代码:

//使用第一张图片创建一个精灵
CCSprite* fish = CCSprite::createWithSpriteFrameName( "fish01_01.png");
fish->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));
addChild( fish); //创建帧数组
char buff[20] = {0};
CCArray* arr = CCArray::create();
for ( int i = 1; i < 11; ++i)
{
if ( i < 10)
{
sprintf( buff, "fish01_0%d.png", i);
}
else
{
sprintf( buff, "fish01_%d.png", i);
}
CCSpriteFrame* fishFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName( buff); //依据名字获得图片
arr->addObject( fishFrame); //将CCSpriteFrame加入到数组里面
} //创建CCAnimation对象
CCAnimation* animation = CCAnimation::createWithSpriteFrames( arr, 0.2f); //设置0.2秒切换一帧图像
animation->setLoops( -1); //动画无限循环播放 //利用CCAnimation创建CCAnimate
CCAnimate* animate = CCAnimate::create( animation);
fish->runAction( animate);

我们来看看效果, 小鱼是不是游动了啊, 我们还能够加入CCAction动作, 配合起来就更逼真了, 我这里就不细说了

我们来接着看每张小图都一样大小的, 没有配置文件我们怎么操作:

	// 第一步利用 CCTexture2D读取图片
CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage( "heroHurt.png");
//取出前面三个
CCSpriteFrame* frame0 = CCSpriteFrame::createWithTexture( texture, CCRectMake(400*0, 240*0, 400, 240));
CCSpriteFrame* frame1 = CCSpriteFrame::createWithTexture( texture, CCRectMake(400*1, 240*0, 800, 240));
CCSpriteFrame* frame2 = CCSpriteFrame::createWithTexture( texture, CCRectMake(400*2, 240*0, 1200, 240));
//用第一个创建一个精灵
CCSprite* sprite = CCSprite::createWithSpriteFrame(frame0);
sprite->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));
addChild( sprite); CCArray* arr2 = CCArray::create();
arr2->addObject( frame0);
arr2->addObject( frame1);
arr2->addObject( frame2); CCAnimation* animation2 = CCAnimation::createWithSpriteFrames( arr2, 0.2f); //设置0.2秒切换一帧图像
animation2->setLoops( -1); //动画无限循环播放 CCAnimate* animate2 = CCAnimate::create( animation2);
sprite->runAction( animate2);

记得曾经用的是:

CCSpriteFrame* frame0 = CCSpriteFrame::frameWithTexture( texture, CCRectMake( 400*0, 240*0, 400, 240)); 

CCSprite* sprite = CCSprite::spriteWithSpriteFrame( frame0);

我用的2.1.5的居然不能使用, 查了好久官方API才找到

CCSpriteFrame* frame0 = CCSpriteFrame::createWithTexture( texture, CCRectMake(400*0, 240*0, 400, 240));

CCSprite* sprite = CCSprite::createWithSpriteFrame(frame0);

好了  看效果:

额, 这个, 我没有把图片的位置计算对, 所以

今天还是就到此为止吧

cocos2dX 之CCAnimation/CCAnimate的更多相关文章

  1. cocos2dx基础篇(22) 基本动画CCAnimation/CCAnimate

    [小知识] CCSpriteFrame     :精灵帧.    它是相对动画而产生的,其实就是一张纹理图片. CCAnimationFrame  :动画帧.    由精灵帧与间隔帧数组成,是动画CC ...

  2. cocos2dx 运动+旋转动画 CCSequence CCAnimation CCAnimate CCMoveTo CCCallFuncN

    cocos2dx 动画是个非常奇妙的东西~~. 这里看到的是一个物体,在运动的过程中会不断地翻转的过程. 两个动画一起来~~ 以下的代码中涉及到:CCAnimation(补间动画 )  CCAnima ...

  3. 动作-CCActionInterval之CCAnimation&CCAnimate

    动画简单实例 v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#def ...

  4. Cocos2d-X使用CCAnimation创建动画

    动画在游戏中是很常见的 程序1:创建一个简单的动画 首先须要在project文件夹下的Resource文件夹中放一张有各种不同动作的图片 在程序中加入以下的代码 #include "Anim ...

  5. Cocos2d-x 创建(create)动画对象CCAnimation报错分析

    本人在使用精灵表单创建动画的过程中突然遇到了一些个问题,下面进行一下分析总结. 根据在Cocos2d-iphone中的经验,我写出了如下的代码: CCSpriteFrameCache::sharedS ...

  6. cocos2dx中创建动画的三种方法

    1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate) 第一步: 创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg ...

  7. 【Cocos2d-X开发学习笔记】第21期:动画类(CCAnimate)的使用

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 之前我们已经学习过一些方法让节点“动”起来,Co ...

  8. cocos2d-x 2.0通过CCAnimation实例获取CCSpriteFrame

    通过CCAnimation实例获取CCSpriteFrame,会出现类型转换问题.我们在创建一个animation的时候,经常遵循下面的步骤:1)create 一个CCArray对象A.2)通过A-& ...

  9. cocos2dx 实现flappybird

    前两天在博客园看到网友实现的一个网页版的flappy bird,挂在360游戏平台,玩了一会儿得分超低,就很想自己做一个.刚好这两天炫舞的活都清了,就弄一下玩玩. 效果图 布局类GameScene.h ...

随机推荐

  1. Web API 接口说明文档

    1.采用 Web API Help Page 显示效果 2.swaggerui 创建文档接口 效果图 3.swagger ui 安装配置 nuget 安装 2.设置xml文件 3.配置根路径 预览sw ...

  2. Nodejs Express目录结构

    原文  http://www.leixuesong.cn/1508 Express是一个基于Node.js平台的极简.灵活的web应用开发框架.在前面我们已经详细介绍了Express的安装,下面详细讲 ...

  3. java基础之自定义单链表练习

    一.单链表 1.单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置), ...

  4. python多进程,进程池,数据共享,进程通信,分布式进程

    一.操作系统中相关进程的知识   Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前 ...

  5. Mybatis逆向工程文件标签的详细介绍:

    ?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUB ...

  6. T2485 汉诺塔升级版(普及)(递归)

    https://www.luogu.org/problem/show?pid=T2485 题目背景 汉诺塔升级了 题目描述 现在我们有N个圆盘和N个柱子,每个圆盘大小都不一样,大的圆盘不能放在小的圆盘 ...

  7. Leetcode559.Maximum Depth of N-ary TreeN叉树的最大深度

    给定一个 N 叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数. 说明: 树的深度不会超过 1000. 树的节点总不会超过 5000. class Solution { ...

  8. cmd命令调用powershell脚本方法

    cmd方法: powershell -command ". ('ps1脚本路径'); WriteInfo  -param 'param参数值'" ps1脚本代码: function ...

  9. Oracle基础知识:DECODE、NVL

    select 1 from PMADW.GET_WX_DATAPUSH_NEW_CHECK A INNER JOIN PMADW.V_EXCEPTION_QTY_MAIN B on DECODE( A ...

  10. ubuntu 软件的更新及解决软件中心自己无法打开

    sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install --reinstall software-center