1、单独载入精灵对象

渲染效率低,浪费资源,不推荐用该方法。代码例如以下:注:代码仅仅需贴到HelloWorldScene.cpp中就可以。

//First,单独渲染每个精灵帧
auto sprite = Sprite::create("grossini_dance_01.png");
sprite->setPosition(Vec2(visibleSize.width/2,visibleSize.height/4*3));
addChild(sprite); auto animation = Animation::create();
char strName[50] = {0};
for(int i = 1; i <= 14; i++)
{
sprintf(strName, "grossini_dance_%02d.png",i);
animation->addSpriteFrameWithFile(strName);//将全部的精灵载入到animation
} animation->setDelayPerUnit(3.0f / 14);//3秒内播放14帧动画
animation->setRestoreOriginalFrame(true);//重头開始播放
sprite->runAction(RepeatForever::create(Animate::create(animation)));//运行动作

2、一次载入,使用精灵帧

效率和资源有提高,可是使用Rect截取精灵对象不方便。代码例如以下:
//Second,一次渲染
auto textTure = Director::getInstance()->getTextureCache()->addImage("dragon_animation.png");
SpriteFrame* frame0 = SpriteFrame::createWithTexture(textTure, Rect(132*0,132*0,132,200));//截取精灵帧
SpriteFrame* frame1 = SpriteFrame::createWithTexture(textTure, Rect(132*1,132*0,132,200));
SpriteFrame* frame2 = SpriteFrame::createWithTexture(textTure, Rect(132*2,132*0,132,200));
SpriteFrame* frame3 = SpriteFrame::createWithTexture(textTure, Rect(132*3,132*0,132,200));
SpriteFrame* frame4 = SpriteFrame::createWithTexture(textTure, Rect(132*0,132*1,132,200));
SpriteFrame* frame5 = SpriteFrame::createWithTexture(textTure, Rect(132*1,132*1,132,200)); Vector<SpriteFrame*> arr;//载入精灵帧
arr.pushBack(frame0);
arr.pushBack(frame1);
arr.pushBack(frame2);
arr.pushBack(frame3);
arr.pushBack(frame4);
arr.pushBack(frame5); auto sp = Sprite::createWithSpriteFrame(frame0);//用第一帧精灵对象。初始化精灵
sp->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));
addChild(sp); auto animation1 = Animation::createWithSpriteFrames(arr,0.2f);//运行动作
sp->runAction(RepeatForever::create(Animate::create(animation1)));

3、使用TexturePacker打包精灵对象。帧载入

推荐使用该方法:1)打开TexturePacker工具。addSprite导入精灵对象。2)Data Format选择cocos2d。3)Texture format使用
PNG格式。Layout的Max Size W和H能够修改。可是尺寸是2的幂。4)Publish sprite sheet,打包。保存地址就是project的Resource就可以。代码例如以下:
//Third,first和second的集合,使用TexturePacker工具,将精灵对象打包
auto cache = SpriteFrameCache::getInstance();
cache->addSpriteFramesWithFile("animation.plist");//载入plist文件 auto sp1 = Sprite::createWithSpriteFrameName("grossini_dance_01.png");//使用第一帧精灵初始化对象,精灵对象的名字与plist中的名字一致
sp1->setPosition(Vec2(visibleSize.width/2,visibleSize.height/4));
addChild(sp1); Vector<SpriteFrame*> arr1;
char str[50] = {0};
for(int i = 1; i <= 14; i++)
{
sprintf(str, "grossini_dance_%02d.png",i);//将精灵帧载入
auto frame = cache->getSpriteFrameByName(str);
arr1.pushBack(frame);
}
//运行动作
auto animation2 = Animation::createWithSpriteFrames(arr1,0.1f);
sp1->runAction(RepeatForever::create(Animate::create(animation2)));

4、效果图


Cocos2d-x3.3beta0创建动画的3种方式的更多相关文章

  1. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  2. 【java并发】传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  3. js学习-DOM之动态创建元素的三种方式、插入元素、onkeydown与onkeyup两个事件整理

    动态创建元素的三种方式: 第一种: Document.write(); <body> <input type="button" id="btn" ...

  4. 创建TabHost的两种方式的简单分析

    最近做了一个TabHost的界面,在做的过程中发现了一些问题,故和大家分享一下. 首先我的界面如下: 目前就我所知,创建TabHost有两种方式,第一种是继承TabActivity类,然后用getTa ...

  5. Java创建线程的第二种方式:实现runable接口

    /*需求:简单的卖票程序多个窗口买票 创建线程的第二种方式:实现runable接口 *//*步骤1.定义类实现Runable接口2.覆盖Runable接口中的run方法    将线程要运行的代码存放在 ...

  6. 创建线程的两种方式比较Thread VS Runnable

    1.首先来说说创建线程的两种方式 一种方式是继承Thread类,并重写run()方法 public class MyThread extends Thread{ @Override public vo ...

  7. Java中创建线程的两种方式

    创建线程的第一种方式: 创建一个类继承Thread 重写Thread中的run方法 (创建线程是为了执行任务 任务代码必须有存储位置,run方法就是任务代码的存储位置.) 创建子类对象,其实就是在创建 ...

  8. javascript创建类的6种方式

    javascript创建类的7种方式 一 使用字面量创建 1.1 示例 var obj={}; 1.2 使用场景 比较适用于临时构建一个对象,且不关注该对象的类型,只用于临时封装一次数据,且不适合代码 ...

  9. 创建控制器的3种方式、深入了解view的创建和加载顺序

    转载自:http://blog.csdn.net/weisubao/article/details/41012243 (1)创建控制器的3种方式 - (BOOL)application:(UIAppl ...

随机推荐

  1. 缓存,队列(Redis,RabbitMQ)

    Redis Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  2. Android 解析JSON

    上次讲了XML格式数据的解析方式,这次要说的是如何解析JSON数据格式,相对与XML,JSON解析数据的方式在于它的体积更小,在网络上传输可以更省流量. 这次在网上找到一个中国天气json数据的API ...

  3. semiautomatic annotated tools

    在进行实验图像取样时,可能会用到大量的标签样本,拍摄大量图片进行手工标注要消耗大量时间,半自动化的标注工具可以节省一些时间. 原文链接:http://blog.sina.com.cn/s/blog_6 ...

  4. jq 获取表单所有数据

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. 团体程序设计天梯赛-练习集-L1-048. 矩阵A乘以B

    L1-048. 矩阵A乘以B 给定两个矩阵A和B,要求你计算它们的乘积矩阵AB.需要注意的是,只有规模匹配的矩阵才可以相乘.即若A有Ra行.Ca列,B有Rb行.Cb列,则只有Ca与Rb相等时,两个矩阵 ...

  6. 【转】虚拟化(二):虚拟化及vmware workstation产品使用

    vmware workstation的最新版本是10.0.2.相信大家也都使用过,其中的简单的虚拟机的创建,删除等,都很简单,这里就不再详细说明了,下面我将简单介绍下vmware workstatio ...

  7. luogu P4719 【模板】动态 DP 矩阵乘法 + LCT

    方法二:LCT+矩阵乘法 上文中,我们用线段树来维护重链上的各种矩阵转移. 第二种方法是将树链剖分替换为动态树. 我们知道,矩阵乘法 $\begin{bmatrix} F_{u,0} & F_ ...

  8. commons.dbutils 的使用列子

    c0p3的导入请参考前文 https://www.cnblogs.com/appium/p/10183016.html JdbcUtils: package cn.itcast.jdbc; impor ...

  9. Ubuntu下解压(unzip)乱码的解决方法

    在Windows上压缩的文件,是以Windows系统默认编码中文来压缩文件.由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码. 通过unzip -- ...

  10. vue 中引入Jquery插件

    import $ from '../../static/js/jquery.min.js' window.jQuery = $; require('../../static/js/jquery.zoo ...