cocos2dx中创建动画的三种方法
1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate)
第一步:
创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg)
CCSpriteFrame *frame1=CCSpriteFrame::create("1.png");
CCSpriteFrame *frame2=CCSpriteFrame::create("2.png");
CCSpriteFrame *frame3=CCSprteFrame::create("3.png");
...
第二步:创建动画打包,CCAnimation,依赖于创建好的动画帧,CCSpriteFrame
CCAnimation *animation=CCAnimation::create();
animation->addSpriteFrame(frame1);
animation->addSpriteFrame(frame2);
animation->addSpriteFrame(frame3);
...
设置帧动画之间的播放间隔
animation->setDelayPerUnit(0.2);
设置帧动画循环播放的次数
animation->setLoops(5);//-1表示无限循环
第三步:创建真正的动画:animate,依赖于动画打包,CCAnimation
CCAnimate *animate=CCAnimate::create(animation);
执行动画:spr->runAction(animate);
//animation->addSpriteFrameWithFileName(CCString::createWithFormat("animation/p_2_0%d.png", i + 1)->getCString());//通过图片直接创建帧,这是对上面的一种简化,但是没法利用帧缓存,效率不高
第二种创建动画的方法:
使用帧动画缓存:CCSpriteFrameCache,主要是简化了从原始图片一帧一帧的加载到内存的步骤
第一步:创建图片帧缓存,依赖于打包好的xx.plist图片文件
CCSpriteFrameCache::sharedFrameCache()->addSpriteFramesWithFile("xx.plist");
第二步:将图片帧缓存中的图片帧通过循环加入到CCArray数组中(容器),需要先创建好容器
CCArray *array=CCArray::create();
for(int i=0;i<n;i++)
{
CCString *str=CCString::createWithFormat("%d.png",i+1);
CCSpriteFrame *frame=CCSpriteFrameCache::sharedFrameCache()->spriteFrameByName(str);//通过图片帧的名字从图片帧缓存中获得图片帧
array->addObject(str);//将图片帧加入数组容器中
}
CCAnimation *animation=CCAnimation::createWithSpriteFrames(array);//通过图片帧数组来创建动画打包
animation->setDelayUnit(0.2);
animation->setLoops(-1);
CCAnimate *animate=CCAnimate::create(animation);
spr->runAction(animate);
第三种创建帧动画的方法:
不需要先加载到容器(CCArray)中存起来,直接加入帧动画打包中即可.
第一步:创建帧动画缓存CCSpriteFrameCache
CCSpriteFrameCache::sharedFrameCache()->addSpriteFramesWithFile(xx.plist);
CCAnimation *animation=CCAnimation::create();
for(int i=0;i<n;i++)
{
CCString str=CCString::createWithFormat("%d",i++);
animation->addSpriteFrame(CCSpriteCache::sharedFrameCache()->spriteFrameByName(str->getCstring()));
}
animation->setDelayUnit(0.2);
animation->setLoops(-1);
CCAnimate *animate=CCAnimate::create(animation);
spr->runAction(animate);
第三种方法是结合了第一种和第二种方法优点,省去了先获取图片帧放入容器中,再统一从CCArray中提取图片帧来创建动画打包的步骤.
cocos2dx中创建动画的三种方法的更多相关文章
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...
- Java中创建线程的三种方法以及区别
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.Java可以用三种方式来创建线程,如下所示: 1)继承Thread类创建线程 2)实现Runnable接口创建线 ...
- java创建线程的三种方法
这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...
- Java中创建数组的几种方法
Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...
- 《Java多线程面试题》系列-创建线程的三种方法及其区别
1. 创建线程的三种方法及其区别 1.1 继承Thread类 首先,定义Thread类的子类并重写run()方法: package com.zwwhnly.springbootaction.javab ...
- Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法(转)
Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法http://www.cnblogs.com/zdz8207/archive/2013/02/27/android- ...
- Openerp 中打开 URL 的三种 方法
来自:http://shine-it.net/index.php/topic,8013.0.html 最近总结了,Openerp 中打开 URL 的三种 方法: 一.在form view 添加 < ...
- mysql 中添加索引的三种方法
原文:http://www.andyqian.com/2016/04/06/database/mysqleindex/ 在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以 ...
- jQuery中detach&&remove&&empty三种方法的区别
jQuery中empty&&remove&&detach三种方法的区别 empty():移除指定元素内部的所有内容,但不包括它本身 remove():移除指定元素内部的 ...
随机推荐
- java的技术调用栈图示例
- Asp.Net-创建网站的快捷方式到桌面,开始菜单,收藏夹
/// <summary> /// 创建快捷方式 /// </summary> /// <param na ...
- C#--深入分析委托与事件
本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单. 还将为您解释委托的协变与逆变,以及如何使用 Delegate ...
- Android—SDCard数据存取&Environment简介
1:Environment简介: Environment是android.os包下的一个类,谷歌官方文旦的解释为:Provides access to environment variables(提供 ...
- 运维人愿意听到的话 vs 不愿意听到的话
在公司兼做了接近两年的远程运维工作,与内部打交道的过程中听到各种各样的话, 简单摘列一下那些似曾相识的愿意.不愿意听到的话: ”先别操作,帮忙先拷贝日志!我们调查一下答复!“ vs ”你先重启一下 ...
- PHP实现前台同步显示后台任务进度
一次批量发送几千条短信. 如果直接在后台循环执行虽然可行,但是前台操作用户就只能坐着空等,完全看不到后台执行结果,所以考虑能不能有一种办法可以在php后台执行过程中同时在前台显示后台执行任务进度呢. ...
- Exchange之证书申请
1. 打开EMC,选择服务器配置,然后右击新建证书 2. 输入一个好记的名称 3. 这里申请通配符证书 4. 填 ...
- QA在网站建设中的作用
在网站建设项目中,有一个团队负责产品测试并识别产品中的缺陷是很有意义的.问题在于,不应该只依赖这个团队来发现所有的缺陷,就像航空公司不能只依靠空乘人员确保飞机安全一样.这个观点的核心是一个简单的事实, ...
- 苹果系统开发中的混合编程(2):Swift和C的相互调用
在进行Swift和C之间的相互调用时,有必要先了解一下两种语言之间的类型转换关系: C 类型 Swift 类型 bool CBool char, signed char CChar unsig ...
- Cocos2d-JS地图性能问题
如图所示游戏场景,它是我们以往介绍的实例,在场景中有三个方块精灵(BoxA.BoxB和BoxC)和背景精灵,这个背景叫做“地图”有点牵强,地图采用了有规律的纹理. 游戏场景 那么我们如何设计这个游戏地 ...