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():移除指定元素内部的 ...
随机推荐
- 关于onsaveinstancestate和 onRestoreInstanceState()
之所以有这个话题,是因为工作遇到过两个问题.一个问题是页面空白,fragment重复创建.另一个问题是登录页用到了AutoCompleteTextView,调用showDropDown()方法导致cr ...
- 【转】IT管理人才必备的十大能力
作为IT技术人员,相信没有一个人愿意永远在底层编写程序或做简单的系统维护.经过一段时间的技术和经验的积累,很多人都向往更高层的职位,但如何能成为一个专业的IT管理人才,并不是每一个人都清晰.明了. & ...
- Differential Geometry之第五章曲面的内蕴几何学
第五章.曲面的内蕴几何学 1.曲面的等距变换 2.曲面的协变微分 协变微分: 3.测地曲率与测地线 4.测地坐标系 4.1.测地平行坐标系 4.2.测地极坐标系和法坐标系 5.Gauss-Bonnet ...
- Redis中hash表中的field的value自增可以用hincrby
Redis HINCRBY命令用于增加存储在字段中存储由增量键哈希的数量.如果键不存在,新的key被哈希创建.如果字段不存在,值被设置为0之前进行操作. 回复整数,字段的增值操作后的值. redis ...
- 十二、Android UI开发专题(转)
http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=18736&page=1#pid89255Android UI开发专题(一) 之界面设计 近期很 ...
- ef codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题.
需要在库程序包管理器里依次执行以下命令: 1.启用迁移功能:Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDbContext 2.建立 ...
- iOS 复杂tableView的 cell一般设计思路
- C 【block类型全方位详解】
------------------------------------------- block变量的概念 #import <Foundation/Foundation.h> int m ...
- Javascript Class
做个记录,javascript 如何创建类? 有早期的,有原型的,有构造函数的 // early javascript object var o = {}; o.color = 'red'; o.sh ...
- JAVA:类,对象,成员属性,成员方法,构造方法,类变量,类方法<2>
一.类的定义 一个全面的类定义是比较复杂的, 定义如下: