本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010

之前我们已经学习过一些方法让节点“动”起来,Cocos2D-X中还有一种动作,就是动画类CCAnimate。要实现

CCAnimate,还需要定义CCAnimation等类。在这一期中,我们主要使用两种方法来实现动画的效果。

一、手动添加帧序列实现动画

1、CCAnimate和CCAnimation类的使用方法。

<1> CCAnimate::create(CCAnimation * pAnimation)

作用:根据CCAnimation中的帧序列、帧间隔,不断切换精灵帧,形成动画效果。

参数:CCAnimation对象。

<2> CCAnimation::create()

作用:创建一个动画的帧序列信息,其中包括帧间隔和循环次数。

2、CCAnimation类的常用函数。

<1> setDelayPerUnit(float var)

作用:设置帧间隔的时间。

参数:帧间隔。

注意:如果此函数不设置,动画将无法动态播放!

<2> setRestoreOriginalFrame(bool var)

作用:当动画播放完后,帧序是否重设为默认第一帧。

参数:其值为true,表示动画播完后回到第一帧。

<3> setLoops(unsigned int var)

作用:设置循环次数。

参数:循环次数,其值为-1时,动画无线循环。

<4> setFrames(CCArray * var)

作用:设置动画帧数组。

参数:帧数组。

3、项目示例。

首先新建Cocos2D-X项目,取名为“MyAnimation01”,然后在HelloWorldScene.cpp文件的init函数中添加如下代码。

bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init()); CCSprite* sp = CCSprite::create("crop1.png");
sp->setPosition(ccp(170,200));
addChild(sp); CCAnimation* animation = CCAnimation::create();
animation->addSpriteFrameWithFileName("crop1.png");
animation->addSpriteFrameWithFileName("crop2.png");
animation->addSpriteFrameWithFileName("crop3.png");
animation->addSpriteFrameWithFileName("crop4.png"); animation->setDelayPerUnit(2.8f / 14.0f);//必须设置否则不会动态播放
animation->setRestoreOriginalFrame(true);//是否回到第一帧
animation->setLoops(-1);//重复次数 (-1:无限循环) CCFiniteTimeAction * animate = CCAnimate::create(animation);
sp->runAction(animate); bRet = true;
} while (0); return bRet;
}

4、示例效果图。

                     

二、使用plist配置文件实现动画

在Mac系统的Cocoa等编程框架中,属性列表文件是一种用来存储串行化后的对象的文件。属性列表文件的扩展

名为plist,因此通常被称为plist文件。plist文件通常用于存储用户设置,也可以用于存储捆绑的信息,该功能在旧式的

Mac系统中是由资源分支提供的。通过plist文件也可以定义动画。

1、首先来介绍两个函数。

<1> CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(const char * pszPlist)

作用:根据plist中的每个精灵图片名,创建对应的帧CCSpriteFrame放入帧缓存中。

参数:plist资源文件名。

<2> CCAnimation::createWithSpriteFrames(CCArray * frames,float delay)

作用:根据帧数组与帧间隔创建一个动画的帧序列信息。

参数1:帧数组。

参数2:帧间隔。

2、项目示例。

首先新建Cocos2D-X项目,取名为“MyAnimation02”,然后在HelloWorldScene.cpp文件的init函数中添加如下代码。

bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init()); CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("crop.plist"); //利用帧缓存创建精灵
CCSprite* sp = CCSprite::createWithSpriteFrameName("crop1.png");
sp->setPosition(ccp(170,200));
addChild(sp); CCArray* animFrames = CCArray::createWithCapacity(4);
char str[100] = {0};
for(int i = 1; i < 5; i++)
{
sprintf(str, "crop%i.png", i);
CCSpriteFrame *frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(str);
animFrames->addObject(frame);
} CCAnimation *animation = CCAnimation::createWithSpriteFrames(animFrames, 0.3f);
animation->setLoops(-1);
sp->runAction(CCAnimate::create(animation)); //CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFrameByName("crop.plist") bRet = true;
} while (0); return bRet;
}

3、示例效果图。

                     

源码下载地址

【Cocos2d-X开发学习笔记】第21期:动画类(CCAnimate)的使用的更多相关文章

  1. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  2. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  3. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  4. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  5. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  6. 高性能Cordova App开发学习笔记

    高性能Cordova App开发学习笔记 文件结构 添加插件 构建准备 各个www的作用,prepare命令会将hello\www的内容会拷贝到platform下的wwww目录,知道该改哪里了吧?如果 ...

  7. 步步为营 SharePoint 开发学习笔记系列总结

    转:http://www.cnblogs.com/springyangwc/archive/2011/08/03/2126763.html 概要 为时20多天的sharepoint开发学习笔记系列终于 ...

  8. Kinect开发学习笔记之(一)Kinect介绍和应用

    Kinect开发学习笔记之(一)Kinect介绍和应用 zouxy09@qq.com http://blog.csdn.net/zouxy09 一.Kinect简单介绍 Kinectfor Xbox ...

  9. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

随机推荐

  1. UVa 10054 The Necklace【欧拉回路】

    题意:给出n个珠子,珠子颜色分为两半,分别用1到50之间的数字表示, 现在给出n个珠子分别的颜色,问是否能够串成一个环.即为首尾相连,成为一个回路 判断是否构成一个环,即判断是否为欧拉回路,只需要判断 ...

  2. hdu 4612 Warm up(缩点+树上最长链)

    本来就是自己负责图论,结果水了= = 题目其实很裸,就是求桥的数量,只是要新加上一条边罢了.做法:先缩点.再在树上搜最长链(第一场多校的hdu 4607Park Visit就考了最长链,小样,套个马甲 ...

  3. MYSQL查询数据库表索引的硬盘空间占用

    查询数据库的占用 SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024), 2), ' MB') AS 'Total Index Size' , CONCA ...

  4. 转载RabbitMQ入门(2)--工作队列

    工作队列 (使用Java客户端) 在这第一指南部分,我们写了通过同一命名的队列发送和接受消息.在这一部分,我们将会创建一个工作队列,在多个工作者之间使用分布式时间任务. 工作队列(亦称:任务队列)背后 ...

  5. 【转】setTag()/getTag()

    原文网址:http://www.cnblogs.com/topcoderliu/archive/2011/06/07/2074419.html View中的setTag(Onbect)表示给View添 ...

  6. JAVA模块化

    今天转载JAVA模块化系列的三篇文章. 在过去几年,Java模块化一直是一个活跃的话题.从JSR 277(现已废止)到JSR 291,模块化看起来是Java进化过程中的必经一环.即便是基于JVM的未来 ...

  7. mysql的几种隐式转化

    1. 表定义是字符型,传入的是Int 2. 字符集不一致.表定义的字段是gbk,传入的是utf8:这种在存储过程中出现得比较多. 数据库的字符集utf8 mysql> show create d ...

  8. POJ 1160 Post Office

    题意:有n个村庄,要在其中m个村庄里建邮局,每个村庄去邮局的代价为当前村庄到最近的一个有邮局村庄的路程,问总最小代价是多少. 解法:dp.dp[i][j]表示在前j个村庄建立i个邮局后的代价,则状态转 ...

  9. mybatis Mapper XML 文件

    MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...

  10. Islands and Bridges(POJ 2288状压dp)

    题意:给你一个图和每个点的价值,边权值为连接两点权值的积,走哈密顿通路,若到达的点和上上个点相连则价值加三点乘积,求哈密顿通路的最大价值,和最大价值哈密顿通路的条数. 分析:开始看这个题很吓人,但想想 ...