转载标明出处:http://blog.csdn.net/notbaron/article/details/38326351
上篇回顾
上篇中,蛤蟆学习了手动创建一个帧动画,然后用精灵调用该动画最后将动画在HelloWorld 上显示出来。不过上篇我们通过一个for循环创建动画,在实际做游戏当中可能使用的比较少。这篇我们继续帧动画,不过这次的帧动画是采用PLIST文件来实现的。
理论补充
Plist文件介绍,以下摘自维基百科:
在Mac OS X的Cocoa,NeXTSTEP和GNUstep编程框架中,属性列表(Property List)文件是一种用来存储串行化后的对象的文件。属性列表文件的文件扩展名为.plist,因此通常被称为plist文件。
因为cocos2d-x来源于cocos2d-iphone所以会有plist文件,不知道将来会不会被替换掉。
代码部分
我们还是用之前创建的HelloWorld项目工程。复制的图片还是和上一篇一样多。此外复制
\cocos2d-x-3.2\tests\cpp-tests\Resources\animations\目录中的grossini.plist,grossini_blue.plist,grossini_family.plist到我们项目的resources目录中。
这次我们只需要在
bool HelloWorld::init() 函数中加入如下代码即可。
auto grossini =Sprite::create("grossini.png");
auto cache =AnimationCache::getInstance();
cache->addAnimationsWithFile("animations-2.plist");
auto animation = cache->getAnimation("dance_1");
auto action =Animate::create(animation);
grossini->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 +origin.y));
grossini->runAction(action);
this->addChild(grossini, 0);
代码明显变短了,和手动创建帧动画比起来。
代码解释
auto grossini =Sprite::create("grossini.png");
//这行就不解释了
auto cache =AnimationCache::getInstance();
//这个类继承如下
这个是动画缓存单例类。如何想要保存动画,就需要使用这个缓存。
cache->addAnimationsWithFile("animations-2.plist");
上一行代码表示从plist添加一个动画。确保帧已经加载到了SpriteFrameCache中。
animations-2.plist文件复制自 \cocos2d-x-3.2\tests\cpp-tests\Resources\animations\路径,复制的时候记得同时复制 grossini.plist,grossini_blue.plist,grossini_family.plist.因为animations-2.plist 文件中有包含这些plist文件。
auto animation = cache->getAnimation("dance_1"); //从缓存中获取一个动画。
auto action = Animate::create(animation); //创建一个动画播放器
grossini->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
//这一行设置精灵的位置。
grossini->runAction(action); //此行不解释了
this->addChild(grossini, 0); //此行不解释了
总结
通过本笔记,我们使用了Plist文件进行了动画创建。从代码量上来看明显比手动创建要少了很多,这是因为很多东西都放在了plist文件里面实现了。
下篇蛤蟆回去学习下如何使用TexturePacker这个工具来产生Plist文件。