跟着石头哥哥学cocos2d-x(四)--cocos2dx中的动画以及TexturePacker使用

2019独角兽企业重金招聘Python工程师标准>>> hot3.png


之前向Andreas Loew申请了一枚TexturePacker注册码,很快都下来了,作为回报我打算还是写一篇关于TexturePacker的使用博客吧,有兴趣的可以在这里申请密钥,http://www.codeandweb.com,前不久他也来信回访过问我使用感觉怎样,因为工作的原因,太忙了,这里我主要介绍下cocos2dx中的动画以及TexturePacker使用。

做动画之前,要准备素材,在demo中的你可以下载:http://pan.baidu.com/share/link?shareid=1419818902&uk=3088193979

打开TexturePacker,

这个相信大家都看得懂,这里选择cocos2d,然后添加文件夹,该工具会自动加载纹理图片,选择打包的纹理图片以及plist输出路径:


各项参数设定完毕,发布,你会在设置的输出路径得到打包好的图片以及一个plist文件;

接下来,介绍下动画的创作:

动画创作有很多中方式,这里我就采用plist方式来创建动画;注意几点 1.精灵帧缓冲;2.精灵帧;3.动画序列容器;ps:再次建议学2dx的话,有精力, 把源码翻来看看,因为我们很多是记不住的 但是原理一定要明白。

这里直接上创建动画步骤,demo代码片段:

1、加载plist到缓冲帧里面,这里通过数组来创建动画帧序列;

2.将精灵帧添加到数组中;

3.创建精灵;

4.创建动画序列帧(注意动画序列容易这里CCSequence用类型),最后回调runAction(CCAction *action);


#ifndef __ROLE__HH__
#define   __ROLE__HH__
#include "cocos2d.h"
USING_NS_CC;
class role:public CCLayer
{
public:role(void);~role(void);virtual bool init();  static cocos2d::CCScene* scene();CREATE_FUNC(role);
};
#endif




#include "role.h"role::role(void)
{
}role::~role(void)
{
}bool role::init()
{bool bRet = false;do {//-new-//CCSize mysize=CCDirector::sharedDirector()->getWinSize();//把role.plist加入缓存帧CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("role/role.plist");//创建帧数组--数组来保存帧动画CCArray * attackArray=CCArray::create();//attackArray->retain();CCArray * attackArray2=CCArray::create();//attackArray2->retain();CCArray * runArray=CCArray::create();//runArray->retain();CCArray * walkArray=CCArray::create();for (int index=1;index!=9;++index){//从缓存中获取精灵帧添加到数组中CCLOG(CCString::createWithFormat("%s%d.png","Img_Zhici",index)->getCString());attackArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(CCString::createWithFormat("%s%d.png","Img_Zhici",index)->getCString()));}//Img_Zhn1.pngfor (int i=1;i!=17;++i){//从缓存中获取精灵帧添加到数组中CCLOG(CCString::createWithFormat("%s%d.png","Img_Zhn",i)->getCString());attackArray2->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(CCString::createWithFormat("%s%d.png","Img_Zhn",i)->getCString()));}//run for (int i=1;i!=7;++i){CCLOG(CCString::createWithFormat("%s%d.png","Img_ZRun",i)->getCString());runArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(CCString::createWithFormat("%s%d.png","Img_ZRun",i)->getCString()));}//walkfor (int i=1;i!=7;++i){CCString::createWithFormat("%s%d.png","Img_Zwlak",i)->getCString();walkArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(CCString::createWithFormat("%s%d.png","Img_Zwlak",i)->getCString()));}//创建攻击类型1 精灵CCSprite * sp=CCSprite::createWithSpriteFrame((CCSpriteFrame*)attackArray->objectAtIndex(0));sp->setPosition(ccp(mysize.width/4,mysize.height/3));this->addChild(sp);//创建攻击类型2精灵CCSprite * standAttack=CCSprite::createWithSpriteFrame((CCSpriteFrame*)attackArray2->objectAtIndex(0));	CCSize visibleSize= CCDirector::sharedDirector()->getVisibleSize();standAttack->setPosition(ccp(visibleSize.width/3,visibleSize.height/3));this->addChild(standAttack);//通过数组中的第一个精灵帧 创建奔跑精灵  CCSprite *runsprite=CCSprite::createWithSpriteFrame((CCSpriteFrame*)runArray->objectAtIndex(0));runsprite->setPosition(ccp(visibleSize.width/2,visibleSize.height/3));this->addChild(runsprite);CCSprite *walkSprite=CCSprite::createWithSpriteFrame((CCSpriteFrame*)walkArray->objectAtIndex(0));walkSprite->setPosition(ccp(visibleSize.width/1.5,visibleSize.height/3));this->addChild(walkSprite);//创建动画CCAnimation *animation1=CCAnimation::createWithSpriteFrames(attackArray,0.1f);CCAnimate *attack1=CCAnimate::create(animation1);CCAnimation * standAnimation=CCAnimation::createWithSpriteFrames(attackArray2,0.1f);CCAnimate *standAnimate=CCAnimate::create(standAnimation);CCAnimation * runAnimation=CCAnimation::createWithSpriteFrames(runArray,0.1f);CCAnimate *runAnimate=CCAnimate::create(runAnimation);CCAnimation * walkAnimation=CCAnimation::createWithSpriteFrames(walkArray,0.15f);CCAnimate *walkAnimate=CCAnimate::create(walkAnimation);//CCSequence动作序列容器 CCSpawnCCSequence* pse1=CCSequence::create(attack1,NULL);CCSequence* pse2=CCSequence::create(standAnimate,NULL);CCSequence* pse3=CCSequence::create(runAnimate,NULL);CCSequence* pse4=CCSequence::create(walkAnimate,NULL);//执行动作 forerversp->runAction(CCRepeatForever::create(pse1));standAttack->runAction(CCRepeatForever::create(pse2));runsprite->runAction(CCRepeatForever::create(pse3));walkSprite->runAction(CCRepeatForever::create(pse4));CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFramesFromFile("role/role.plist");bRet=true;} while (0);return bRet;
}cocos2d::CCScene* role::scene()
{CCScene * scene = NULL;do {scene = CCScene::create();CC_BREAK_IF(! scene);role *layer = role::create();CC_BREAK_IF(! layer);scene->addChild(layer);} while (0);return scene;
}



运行效果如下:


源码在这里以及打包好的资源:http://pan.baidu.com/share/link?shareid=1535353761&uk=3088193979

ps:关于TexturePacker作者,很厉害 也是很热情的 ,key在你申请之后会很快发放下来呵呵,感谢他提供这样优秀的工具!











转载于:https://my.oschina.net/chenleijava/blog/185420

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C/C++学习】之七、指向函数的指针

什么是指向函数的指针 函数指针是指向函数的指针变量,不是指向对象的指针!函数指针本身应该是“指针变量”; “在C语言中,函数本身不是变量,但可以定义指向函数的指针,这种指针可以被赋值、存放于数组之中&…

头像和Karma汽车

Powered by Zoundry RavenTechnorati : Karma, 头像, 汽车 Del.icio.us : Karma, 头像, 汽车 转载于:https://www.cnblogs.com/bsmagic/archive/2008/08/06/1261858.html

内核中架构相关代码简介

以下内容源于朱友鹏《物联网大讲堂》课程的学习,如有侵权,请告知删除。 1、内核代码基本分为3块 (1)arch:本目录下全是cpu架构有关的代码 (2)drivers:本目录下全是硬件的驱动 &am…

All-In-One Code Framework [一站式示例代码库] 【转】

All-In-One Code Framework [一站式示例代码库]2010 对一站式示例代码库,对奋战在一站式示例代码库上的每一位工程师来说都是不同寻常的一年。 在我们共同努力和开发社区的支持下,该项目从一年前的草根雏形,成长为CodePlex排名前三&#xff0…

Repeater的嵌套

今天做了一个小项目学习一下&#xff0c;是关于两个Repeater的嵌套使用的&#xff1a; 关于Repeater的嵌套&#xff0c;关键在于数据项的绑定。 首先&#xff0c;外Repeater需要设置OnItemDataBound事件&#xff0c;在事件中添加子Repeater的数据项绑定&#xff1b; <asp:Re…

Ioc容器Autofac介绍

Autofac是轻量级的开源Ioc容器&#xff0c;在这里可以下载http://code.google.com/p/autofac/。如果你用过其他的Ioc容器&#xff0c;那么学习Autofac使用也会比较容易&#xff0c;下面将通过一些例子来讲解其用法。 先看一个例子&#xff1a; 首先新建一个工程&#xff0c;添加…

汇编指令的学习2——常用的ARM指令

一、常用ARM指令1&#xff1a;数据处理指令 &#xff08;1&#xff09;数据传输指令 mov mvn&#xff08;源目标按位取反后赋给目标&#xff09; &#xff08;2&#xff09;算术指令 add sub rsb adc sbc rsc &#xff08;3&#xff09;逻辑指令 and orr eor …

cocos2dx 3.4 截图代码

Size size Director::sharedDirector()->getWinSize(); //定义一个屏幕大小的渲染纹理 RenderTexture* pScreen RenderTexture::create(size.width,size.height, kCCTexture2DPixelFormat_RGBA8888); log("-------log1---");//获得当前的场景指针 Scene* pC…

NSURLRequest详解IOS最基础的api

http://blog.csdn.net/bl1988530/article/details/6590099转载于:https://www.cnblogs.com/qiqibo/archive/2012/08/22/2650996.html

正则表达式 Mather类的使用

Matcher类: 使用Matcher类,最重要的一个概念必须清楚:组(Group),在正则表达式中 ()定义了一个组,由于一个正则表达式可以包含很多的组,所以下面先说说怎么划分组的, 以及这些组和组的下标怎么对应的. 下面我们看看一个小例子,来说明这个问题 \w(\d\d)(\w) 这个正则表达式有三…

ARM协处理器的汇编指令

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、协处理器的简介 协处理器&#xff08;cp&#xff0c;coprocessor&#xff09;是SoC内部的处理单元&#xff0c;用来协助主CPU实现一些特定的功能&#xff0c;比如MMU、cache、TLB等内容。ARM在设计上支…

用代码实现Sharepoint2010的个人信息的照片上传(2)(原创)

用代码从AD读取照片信息并同步到SharePoint2010的个人照片信息中 前言 上篇我们讲到用代码实现了照片信息同步到SharePoint2010的个人照片信息中&#xff0c;但是做的是从文件夹读取照片信息到SharePoint2010,今天我们要做的从AD的thumbnailPhoto属性中读取照片信息到SharePoin…

HTML5实现Word中文字全环绕图片效果

实现这个功能是当时看见数字报的展示出来的编排方式&#xff0c;就是图片热点&#xff0c;而且下载打开还是PDF的&#xff0c;让我这个WP用户咋个看。想实现Word中的编排方式&#xff0c;也需要浏览器支持Word插件&#xff0c;火狐、谷歌、Opera这些都要另外弄插件&#xff0c;…

汇编指令的学习4——ldm/stm指令、栈的处理

1、为什么需要多寄存器访问指令&#xff1f; ldr/str每周期只能访问4字节内存&#xff0c;如果需要批量读取、写入内存时太慢&#xff0c;解决方案是stm/ldm ldm (load register mutiple) stm&#xff08;store register mutiple&#xff09; 2、举例&#xff1a;stmia sp,…

第一课 GCC入门

1序言 gcc是一个可移植的编译器&#xff0c;支持多种硬件平台&#xff1b;也不仅仅是一个本地编译器也是一个跨平台编译器&#xff1b;支持多张语言编译时按照模块化设计支持多种语言。 gcc编译过程&#xff1a;预处理&#xff08;预处理器&#xff09;&#xff1b;编译&#x…

[转载] 晓说——第9期:多如牛毛严酷无比的美国那些法

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2012/08/26/2657224.html

ARM的汇编伪指令【伪指令的解释】

本文作为此博文的伪指令章节的补充说明。 伪指令的含义 伪指令本质上不是指令。伪指令由编译器环境提供&#xff0c;用来指导编译过程&#xff0c;经过编译后伪指令不会生成机器码。 伪指令是和具体的编译器相关的。我们使用GNU工具链&#xff0c;因此学习GNU环境下的汇编伪指令…

关注 Imagine Cup 2010, 参与软件设计“最具人气奖”投票

关注 Imagine Cup 2010, 参与软件设计“最具人气奖”投票 Imagine Cup 2010全球总决赛将于7月3日到7月8日在波兰华沙举行。现在通过参与软件设计“最具人气”奖投票&#xff0c;你也可以参与到Imagine Cup 2010中。了解全球学生是如何用科技创新帮助我们解决人类面临的最困难问…

浏览器模拟用户登陆

javascript:document.getElementById(user).valuejack;document.getElementById(password).valuetest;submitForm();void(0);转载于:https://www.cnblogs.com/ahghy/p/3488839.html

Bzoj 2127 happiness 最小割

happiness 题解: 将图转换成最小割. 将割完的图中与S相连的点看做选文科, 与T相连的点看做选理科. flow(s, u) 文科值 flow(u,t) 理科值 假设u 和 v 一起选文科有奖励值z, flow(s,u) z/2 flow(s,v) z/2, flow(u,v) z/2 假设u 和 v 一起选理科有奖励值z, flow(u,t) z/2…