使用plist文件加载生成的帧动画
例子:
========================
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Monsters01-hd.plist","Monsters01-hd.png");
auto sp = Sprite::createWithSpriteFrameName("fat_boss_green01.png");
sp->setPosition(ccp(150, 150));
auto ani = Animation::create();
for (int i = 0; i < 2; i++)
{
std::string fileName = StringUtils::format("fat_boss_green0%d.png",i+1);
ani->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName(fileName));
}
ani->setLoops(-1);
ani->setDelayPerUnit(0.5f);
Animate* animate = Animate::create(ani);
sp->runAction(animate);
this->addChild(sp);
===================================
使用图片播放的帧动画,不是最优的
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
手动添加的方法需要将每一帧要显示的精灵有序添加到Animation类中,并设置每帧的播放时间,让动画能够匀速播放。另外,还要通过setRestoreOriginalFrame
来设置是否在动画播放结束后恢复到第一帧。创建好Animation实例后,需要创建一个Animate实例来播放序列帧动画。
在创建Animation实例时会用到以下几个接口:
addSpriteFrame
,添加精灵帧到Animation实例setDelayUnits
,设置每一帧持续时间,以秒为单位setRestoreOriginalFrame
,设置是否在动画播放结束后恢复到第一帧clone
,克隆一个该Animation实例sprite ->runAction(repeatForever );*/
首先我们来了解下需要用到的AnimationCache类。AnimationCache可以加载xml/plist文件,plist文件里保存了组成动画的相关信息,通过该类获取到plist文件里的动画。
在使用AnimationCache类时会用到以下几个接口:
addAnimationsWithFile
,添加动画文件到缓存,plist文件getAnimation
,从缓存中获取动画对象getInstance
,获取动画缓存实例对象使用文件添加的方法只需将创建好的plist文件添加到动画缓存里面,plist文件里包含了序列帧的相关信息。再用动画缓存初始化Animation实例,用Animate实例来播放序列帧动画。
auto cache = AnimationCache::getInstance();
cache->addAnimationsWithFile("animations/animations-2.plist");
auto animation2 = cache->getAnimation("dance_1");
auto action2 = Animate::create(animation2);
_tamara->runAction(Sequence::create(action2, action2->reverse(), NULL));
注意:
3.0开始,Cocos2d-x使用getInstance来获取单例实例。
通常情况下,对于一个精灵动画,每次创建时都需要加载精灵帧,按顺序添加到数组,再创建对应动作类,这是一个非常烦琐的计算过程。对于使用频率高的动画,比如走路动画,将其加入缓存可以有效降低每次创建的巨大消耗。由于这个类的目的和缓存内容都非常简单直接,所以其接口也是最简单了的,如下所示:
建议:
在内存警告时我们应该加入如下的清理缓存操作:
void releaseCaches()
{
AnimationCache::destroyInstance();
SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();
TextureCache::getInstance()->removeUnuserdTextures();
}
值得注意的是清理的顺序,我们推荐先清理动画缓存,然后清理精灵帧缓存,最后是纹理缓存。按照引用层级由高到低,以保证释放引用有效。
场景切换以及特效
auto scene=Hao::createScene();//创建待切换的场景
auto transition=TransitionZoomFlipY::create(1.0f,scene);//给场景包装动画特效
Director::getInstance()->replaceScene(transition);//运用导演类来进行切换场景
CCTransitionJumpZoom 跳跃缩放,当前场景会先缩小,让后跳跃切换
CCTransitionFade 淡入淡出效果,可以设置覆盖颜色
CCTransitionFlipX(Y) 沿着X或Y轴左翻
CCTransitionMoveInL 从左进入覆盖原场景
CCTransitionSlideInL 从左进入推出原场景
Hao这个场景一定要实现了createScene()
using namespace cocos2d;
要加这个命名空间