Cocos2d-x如何用plist制作帧动画
更准确地说,本文将介绍如何通过一个plist文件读取并创建多个帧动画。下面我们来详细了解Cocos2d-x用plist制作帧动画的实现过程。
生成包含多个帧动画信息的plist文件
首先,我们需要使用工具将多个帧动画生成一个plist文件,手动编写plist文件不仅繁琐且容易出错,因此不建议采用。这里我使用的工具是红孩儿工具箱,目前我所需的功能它都具备,大家可以下载使用。具体步骤如下:
- 图片合并:将所需的所有单图片合并为一张大图,可在工具的“切/拼图栏”进行操作,然后保存导出为
PackSpr.plist。 - 创建单个动画的plist文件:
- 切换到动画编辑栏,在Root下绑定新图片Image,右键点击Image,将其命名为
die。 - 创建固定帧关键帧动画,此时是单图片生成模式。查找图块,设置图片起始和图片结束为一个动画,数值从1开始且为连续值,图片名字后缀也要保持一致。完成后保存为
die.plist。 - 按照同样的方法创建第二个动画,不过图片起始值应为上一个图片结束值加1,保存为
walk.plist。
- 切换到动画编辑栏,在Root下绑定新图片Image,右键点击Image,将其命名为
- 合并为一个plist文件:在生成上述两个动画文件
plist的同时,会附带生成两个ani文件。我们可以将这两个ani文件合并为一个plist文件。具体操作是打开角色编辑一栏,在空白区域右键,创建新角色类,命名为RoleAni,添加新角色并同样命名为RoleAni,然后逐个添加动作,导入我们的动画文件ani(分别为die和walk),最后保存为RoleAni.plist。至此,包含多个帧动画信息的plist文件就生成完成了。
在程序中调用生成的plist文件
以下是在Cocos2d-x程序中调用plist文件创建帧动画的代码示例:
// 获取精灵帧缓存实例
CCSpriteFrameCache *frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
// 将PackSpr.plist文件中的精灵帧添加到缓存中
frameCache->addSpriteFramesWithFile("PackSpr.plist");
// 清除之前加载的动画缓存
CCAnimationCache::purgeSharedAnimationCache();
// 获取动画缓存实例
CCAnimationCache *animCache = CCAnimationCache::sharedAnimationCache();
// 将RoleAni.plist文件中的动画添加到缓存中
animCache->addAnimationsWithFile("RoleAni.plist");
// 获取窗口大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// 获取名为die的动画
CCAnimation *die = animCache->animationByName("die");
// 设置动画播放完后恢复到原始帧
die->setRestoreOriginalFrame(true);
// 创建动画动作
CCAnimate *animdie = CCAnimate::create(die);
// 创建动作序列
CCSequence *seqdie = (CCSequence*)CCSequence::create(animdie, NULL);
// 创建精灵
CCSprite *sprdie = CCSprite::create();
// 从精灵帧缓存中获取名为role_10.bmp的精灵帧
CCSpriteFrame *framedie = frameCache->spriteFrameByName("role_10.bmp");
// 设置精灵的显示帧
sprdie->setDisplayFrame(framedie);
// 设置精灵的位置
sprdie->setPosition(ccp(winSize.width/2 - 100, winSize.height/2));
// 设置精灵的缩放比例
sprdie->setScale(0.5);
// 将精灵添加到场景中
addChild(sprdie);
// 运行动画动作
sprdie->runAction(seqdie);
// 获取名为walk的动画
CCAnimation *walk = animCache->animationByName("walk");
// 设置动画播放完后恢复到原始帧
walk->setRestoreOriginalFrame(true);
// 创建动画动作
CCAnimate *animwalk = CCAnimate::create(walk);
// 创建动作序列
CCSequence *seqwalk = (CCSequence*)CCSequence::create(animwalk, NULL);
// 创建精灵
CCSprite *sprwalk = CCSprite::create();
// 从精灵帧缓存中获取名为role_1.bmp的精灵帧
CCSpriteFrame *framewalk = frameCache->spriteFrameByName("role_1.bmp");
// 设置精灵的显示帧
sprwalk->setDisplayFrame(framewalk);
// 设置精灵的位置
sprwalk->setPosition(ccp(winSize.width/2, winSize.height/2));
// 将精灵添加到场景中
addChild(sprwalk);
// 运行动画动作
sprwalk->runAction(seqwalk);
通过以上步骤,我们就可以在Cocos2d-x中使用一个plist文件创建并播放多个帧动画了。