转载此文的目的是为了自己以后查找方便~ 原始出处

一、引子
哦,好吧,我一直比较吐槽cocos2d-x那个动画加载方式,记得我在《cocos2d-x学习笔记04:简单动画》中写的,一个简单动画的加载,就需要写十几行代码。
  1. CCSize s = CCDirector::sharedDirector()->getWinSize();
  2. //#1:生成动画需要的数据类
  3. CCTexture2D *texture=CCTextureCache::sharedTextureCache()->addImage("pic2476.png");
  4. CCSpriteFrame *frame0=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*0, 48*0, 32, 48));
  5. CCSpriteFrame *frame1=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*1, 48*0, 32, 48));
  6. CCSpriteFrame *frame2=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*2, 48*0, 32, 48));
  7. CCSpriteFrame *frame3=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*3, 48*0, 32, 48));
  8. CCMutableArray<CCSpriteFrame*> *animFrames = new CCMutableArray<CCSpriteFrame*>(4);
  9. animFrames->addObject(frame0);
  10. animFrames->addObject(frame1);
  11. animFrames->addObject(frame2);
  12. animFrames->addObject(frame3);
  13. CCAnimation *animation = CCAnimation::animationWithFrames(animFrames, 0.2f);
  14. animFrames->release();
  15. //#2:初始化并设置Sprite
  16. CCSprite *sprite = CCSprite::spriteWithSpriteFrame(frame0);//设置一个初始frame
  17. sprite->setPosition( ccp( s.width/2, s.height/2) );
  18. addChild(sprite);
  19. //#3:使用animation生成一个动画动作animate
  20. CCAnimate *animate = CCAnimate::actionWithAnimation(animation, false);
  21. sprite->runAction(CCRepeatForever::actionWithAction(animate));//重复播放
恩,这其中加载的代码占了好多,我们可以通过刷循环简化。也就是说,理论上至少可以减少大约一半的量。
但是你刷循环简化有个前提:png的排列必须十分规律,否则是无法使用的。并且,不同的动作有不同的帧数和不同的delay,你每个都要自己写。这毫无疑问是一个非常繁琐的过程。
于是我开发了一个工具AnimatePacker,专门解决这个问题。顾名思义,AnimatePacker就是一个动作打包的小工具,可以很方便的自己编辑动作。由此节省大量的程序编码。
二、AnimatePacker使用
这个工具要和TexturePacker等工具配合使用,因为需要他们来提供plist。另外,要使用这个工具,必须先熟悉TexturePacker等工具,以及cocos2d-x的动画代码。
打开界面,一目了然。熟悉cocos2d-x编程的人,肯定知道这四个框是什么。

Plists:所有的Plist列表,拖动plist文件到AnimatePacker窗口上,就可以加载。
Animations:所有的动作列表,点击“摄像机”按钮可以新建动作,双击可以编辑Name和Delay。
SpriteFrames:当前Animation对应的SpriteFrames列表,拖动可以排序。
Sprites:所有的备选Spirte,你可以拖动Spirte到SpriteFrames框下面。
简单使用步骤:
1.拖动plist文件到AnimatePacker窗口
2.点击摄像机,生成新的Animation,在Animations框中编辑Name和Delay
3.从Sprites里拖动Sprite到SpriteFrames,拖动SpriteFrame可排序
就这样不断的编辑和生成即可。
最后,我们点击保存,就可以输出一个自己的xml。这里我们就叫他“1111.xml”好了。
三、解析代码使用
解析1111.xml需要用到下面三个文件:
  1. AnimatePacker.h
  2. AnimatePacker.cpp
  3. Singleton.h //需要导入的支持文件
解析代码非常简单,只有两个接口:

  1. void AnimatePacker::loadAnimate(char *path);//加载xml里面的动画
  2. cocos2d::CCAnimate* AnimatePacker::getAnimate(char *name);//获取指定名称的动画
具体写起来大约是这样的:

  1. AnimatePacker::getInstance()->loadAnimate("1111.xml");
  2. CCSprite *sprite=CCSprite::spriteWithSpriteFrameName("bomb_dead0.png");
  3. sprite->setAnchorPoint(CCPointZero);
  4. sprite->setPosition(ccp(size.width/2, size.height/2));
  5. sprite->runAction(CCRepeatForever::actionWithAction(AnimatePacker::getInstance()->getAnimate("aaa")));
  6. addChild(sprite,1);

AnimatePacker采用Qt编写,也就是说可以跨多个平台。但目前只有win32版,因为mac下我还没配qt开发环境,稍后提供。
这个工具现在是测试版,欢迎提供bug和改进意见,直接在下面回复就行了。

cocos2d-x自制工具01:AnimatePacker相关推荐

  1. 【基于C++面向WindowAPI的自制工具】随机数按位生成器

    [基于C++面向WindowAPI的自制工具]随机数按位生成器 [by_041] 主要想到以前要定时抢淘宝限量货品的时候每次都是记录式的编码,导致代码量极大,工程效率极低. 现尝试使用记录操作信息的方 ...

  2. Unity 自制工具:Point。方便标记出生点或巡逻点等功能。

    Unity 自制工具:Point.方便标记出生点或巡逻点等功能. 之前的一篇点的封装:Unity 实现出生点(Spawn Points)的Scriptable封装 工具源码:Point For Uni ...

  3. chatgpt赋能python:Python编写录屏软件:方便、高效的自制工具

    Python编写录屏软件:方便.高效的自制工具 录屏软件是一种能够将电脑屏幕上的活动记录下来的工具,通常用于制作教学视频.游戏攻略视频等.市面上有很多录屏软件可供选择,但是有时候这些软件不够灵活,无法 ...

  4. cocos2d-x自制工具03:AnimatePacker for Mac/Win32 v1.1 Build1发布!

    下载地址: DropBox: https://www.dropbox.com/s/ft5gzb4f0xnq568/AnimatePacker%20v1.1%20build1.zip 115: http ...

  5. cocos2d-x自制工具02:AnimatePacker v1.1beta发布!!~!

    Added Features: 1.支持拖拽xml文件到AnimatePacker.依然支持plist拖拽,程序会自动识别,自动执行添加plist或打开新的xml的操作. 2.支持删除Plists列表 ...

  6. Cocos2d使用TexturePacker工具打包生成plist和pvr.ccz文件方法总结

    我们用TexturePacker工具打包生成了plist和pvr.ccz文件,那么下一步,我们就该获取plist中的信息了. Cocos2d中SpriteFrameCache通常用来处理plist文件 ...

  7. 工具 01 远程连接工具

    远程链接工具,从putty,到 SecureCRT,再到 xshell.现在发现 windterm 很好. 01 WindTerm https://github.com/kingToolbox/Win ...

  8. 【自制工具类】Java删除字符串中的元素

    这几天做项目需要把多个item的id存储到一个字符串中,保存进数据库.保存倒是简单,只需要判断之前是否为空,如果空就直接添加,非空则拼接个"," 所以这个字符串的数据结构是这样的 ...

  9. Unity Editor自制工具(1)--“Editor目录栏按钮+全局搜索方法+自制Editor窗口”实现搜索与删除场景中任意名称游戏物体

    1,制作Editor上方目录按钮 在C#静态方法上方加上[MenuItem("目录")],可在Editor中上方目录栏生成一个按钮. using System.Collection ...

最新文章

  1. 浙江大学软件学院2020年保研上机模拟练习 7-3 Partial School Ranking
  2. CVPR 2020录用率十年最低,商汤官宣62篇入选
  3. 云计算技术 — 公有云
  4. Django框架-Form组件
  5. uestc 方老师的分身 III 拓扑排序
  6. JAVA – 虚函数、抽象函数、抽象类、接口_对比C++
  7. Gzip, Bzip2,Xz压缩
  8. php 5.6.27 在某些机器上正常,thinkphp5开发的网站出现”No input file specified”(php版本5.6.27)...
  9. 浅谈大学综合能源服务
  10. LR录制https协议报证书错误,导航已阻止
  11. ABAP学习笔记-基础语法-06-流程控制(01)-条件语句
  12. 十大BI报表可视化工具
  13. imageJ二次开发之旅 – imageJ开源项目介绍
  14. 从潞晨到世界名校,实习生火热招聘中
  15. 平面波导型光分路器行业调研报告 - 市场现状分析与发展前景预测
  16. DIY M328晶体管测试仪 挖坑 填坑
  17. 设备跟服务器对接需要什么文档,『OneNET设备云平台』云平台对接服务_智能设备...
  18. 中科曙光I620-G15服务器登录密码破解
  19. 点击地图新增点位多个
  20. Python-base编码和解码方法

热门文章

  1. Google Chrome 浏览器无法运行 Applet 的解决方法
  2. 一次给人重装 Win7 恶心之路
  3. 真香!超全开放 API 免费调用,告别付费,太强了!
  4. 《大数据内功修炼到企业实战2.0》全新完整版!!! 无加密,免费送!!!
  5. NS3系列—2———NS3笔录
  6. 使用VMware Player在Ubuntu中运行Windows
  7. anonymous unions
  8. Spring——Spring学习教程(详细)(上篇)——IOC、AOP
  9. 射频工程师必知必会——为什么是“50欧姆”?
  10. 把ppt变成exe,在没有PPT的电脑上也能随意播放