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

之前向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

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

  1. 跟着石头哥哥学cocos2d-x(三)---2dx引擎中的内存管理模型

    2019独角兽企业重金招聘Python工程师标准>>> 2dx引擎中的对象内存管理模型,很简单就是一个对象池+引用计数,本着学好2dx的好奇心,先这里开走吧,紧接上面两节,首先我们看 ...

  2. Cocos2d-x中替换动画(Armature)中的节点与粒子

    Cocos2d-x游戏开发中常用到骨骼动画Armature,Armature真是个好东西啊,不仅占用资源不大(相对于帧动画来说),而且还能添加帧事件,它还自带有动画的播放.停止.循环事件...bala ...

  3. 第五章 处理器拦截器详解——跟着开涛学SpringMVC

    5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   ...

  4. 跟着开涛学SpringMVC 第一章源代码下载

    2019独角兽企业重金招聘Python工程师标准>>> 源代码请到附件中下载. 其他下载: 跟着开涛学SpringMVC 第一章源代码下载 第二章 Spring MVC入门 源代码下 ...

  5. 跟着开涛学SpringMVC

    第一章 Web MVC简介 1.1.Web开发中的请求-响应模型: 在Web世界里,具体步骤如下: 1.  Web浏览器(如IE)发起请求,如访问http://sishuok.com 2.  Web服 ...

  6. Cocos2d-x的骨骼动画Spine和Armature

    cocos2d-x中骨骼动画常用的有2种,spine和armature Spine的基本用法 //骨骼动画Spine,需要包含Spine/spine-cocos2dx.h头文件,命名空间spineau ...

  7. 手挽手带你学React:四档(上)一步一步学会react-redux (自己写个Redux)

    手挽手带你学React入门四档,用人话教你react-redux,理解redux架构,以及运用在react中.学完这一章,你就可以开始自己的react项目了. 之前在思否看到过某个大神的redux搭建 ...

  8. 【深度学习】ResNet残差网络 ResidualBlock残差块实现(pytorch) | 跟着李沐学AI笔记 | ResNet18进行猫狗分类

    文章目录 前言 一.卷积的相关计算公式(复习) 二.残差块ResidualBlock复现(pytorch) 三.残差网络ResNet18复现(pytorch) 四.直接调用方法 五.具体实践(ResN ...

  9. AP微积分与其跟着学校倒不如先跟着林老师学一一遍----美高学生如何说

    AP计算机 AP微积分 A Level计算机 IGCSE计算机 支持远程现场互动教学 wechat:APFlying 13242019966 由于今年疫情原因,我们学校开设了网课.我是上了半个学期的网 ...

最新文章

  1. BFS:南土所梁玉婷组综述促进土壤植物生态系统健康的微生物共存理论
  2. C++如何监听http请求
  3. 张首晟:量子计算、人工智能与区块链
  4. 这个公式竟然堪称数学界的画家......
  5. 参数php_PHP多参数方法的重构
  6. pdf增强锐化软件_安卓软件—CamScanner 扫描全能王
  7. laravel框架连接Oracle,laravel5.8(十四)连接oracle数据库
  8. 中文乱码在java中URLEncoder.encode方法要调用两次解决
  9. c# log4net
  10. 要是面试官再问我synchronized,我就这么答
  11. 【软件应用】数学公式插件TeXsword应用教程
  12. c语言看门狗的作用,AT89S52单片机看门狗C语言程序
  13. android怎么防8门神器,八门神器(GameKiller)怎么用?安卓版使用教程
  14. 2021年中国纯碱行业发展现状分析,下游需求快速增长,供需关系紧张导致价格走高「图」
  15. java银行排队系统_java--面向对象(一个简单的银行排队系统)原理版
  16. VM189:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1
  17. 分享一款程序员起名神器,让你从此起名不再头秃
  18. WinServer 2019 组策略开启远程桌面(增改)
  19. 计算机控制台程序,什么是电脑控制台,是DOS设定吗?
  20. Python案例1—人民币与美元的汇率兑换V_3.0

热门文章

  1. (十五)非常全面的TCPIP面试宝典-进入大厂必备总结
  2. 《数据结构上机实验(C语言实现)》笔记(1 / 12):绪论
  3. 如何优雅互换Map键与值
  4. C++primer第十一章 关联容器 11.3关联容器操作 11.4 无序容器
  5. Java web后端4 会话 Cookie Session
  6. 潜藏在人体体内的12种毒素
  7. java.util.UnknownFormatConversionException: Conversion = ‘,‘ 解决
  8. Mac 远程命令工具
  9. 从最大似然估计到最小二乘法
  10. Android onLoadFinished与onLoaderReset