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():移除指定元素内部的 ...
随机推荐
- codevs4600 [NOI2015]程序自动分析==洛谷P1955 程序自动分析
4600 [NOI2015]程序自动分析 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 在实现 ...
- 查询sql 并且读取
//显示地址 //VBSBegin // Set obj = GetObject("winmgmts:\\.\root\cimv2") // Set IPConfigSet = o ...
- 入门必须掌握8个DOS命令
一,ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP ...
- SQL取某个字段最大(小)数值及其相应行的其他字段值的句语
如下表Z 中,取 字段a 最大的那行 字段a 字段a 字段cSP000016964 5 20SP000016964 7 30SP000016964 1 15SP0000177 ...
- dateset是不是在缓存中
C#开发erp系统的时候有一个多表数据的查询展示到页面,采用了存储过程的方式,但是存储过程中没有加入分页(菜比).刚开始测试数据几百条没有问题,当数据量提升至十万级后页面加载速度就很卡了,一般是使用分 ...
- Android开发之切换activity动画overridePendingTransition
原文地址:http://blog.sina.com.cn/s/blog_706c449f01011s3v.html overridePendingTransition 在startActivity() ...
- 学习笔记:JavaScript传参方式———ECMAScript中所有函数的参数都是按值传递
我们把命名参数(arguments)视为局部变量,在向参数传递基本类型值时,如同基本类型变量的复制一样,传递一个副本,参数在函数内部的改变不会影响外部的基本类型值.如: function add10( ...
- 10款web前端基于html5/CSS3应用特效
1.jQuery百叶窗效果焦点图 多种百叶窗动画方式 对于百叶窗动画效果,我们介绍的不是很多,目前就介绍过一款CSS3百叶窗图片切换.这次要给大家带来一个基于jQuery的多种百叶窗动画效果焦点图,焦 ...
- HDU1106 排序
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1106 Problem Description 输入一行数字,如果我们把这行数字中的‘5’都看成空格 ...
- QT 信号与槽连接
转帖 http://www.cnblogs.com/cnhome/archive/2009/10/01/1577277.html 信号(SIGNAL)和槽(SLOT)是Qt编程的一个重要部分.这个机制 ...