声 明 本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。 gl.paea.cn版权所有。 |
Hello,欢迎回到“和屌丝一起学cocos2dx”系列教程,上节我们说了基本动画制作,之后,你实验了吗?可以成功吧,嘿嘿,其实逐步写过程是让大家了解一下实现的步骤,这节呢,我们优化一下代码。来看看能不能有更好的方法。好了,一起来吧。
【一】:函数
上节我们是一步一步的去实现了每个动作,但是这样操作会大大的浪费我们的时间,那我们怎么来优化他呢,这里就要和大家说的一个新的东西CCAnimate动漫对象,他会实现动漫的基本功能,所以直接调用会省很多事。我们来看看他的函数。
1.创建
CCAnimation::create();
CCAnimation::createWithSpriteFrames(帧数组,帧间隔);
//创建一个动画的帧序列信息,其中包含帧间隔、循环次数。
CCAnimate::create(CCAnimation对象);
//根据CCAnimation中的帧序列、帧间隔,不断地切换精灵帧,形成动画效果。
2.函数
setDelayPerUnit(); //设置帧间隔时间。(这个必须设置)
setRestoreOriginalFrame(bool); //动画播放完之后会不会回到第一帧
setLoops(); //循环次数(-1为无限循环)
setFrames(帧数组); //设置动画帧数组
【二】:示例
1.新建项目Justgame2
2.载入上节我们用的rw.png和rw.plist文件
Justgame.h
这里啥也不用动,不用更新函数,也不用设置变量。
Justgame.cpp
//-new-//
CCSize mysize=CCDirector::sharedDirector()->getWinSize();
//把rw.plist加入缓存帧
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("rw.plist");
//创建1个sprite精灵,使用第一张图
CCSprite * sp=CCSprite::createWithSpriteFrameName("r1.png");
sp->setPosition(ccp(50,mysize.height/2));
this->addChild(sp);
//创建帧数组
char str[50];
CCArray * animatearray=CCArray::createWithCapacity(4);
for(int i=1;i<5;i++){<>
sprintf(str,"r%i.png",i);
CCSpriteFrame * frame=CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(str);
animatearray->addObject(frame);
}
//创建CCAnimation对象
CCAnimation * ma=CCAnimation::createWithSpriteFrames(animatearray,0.2f);
ma->setLoops(-1);
//创建CCAnimate对象
CCFiniteTimeAction * an=CCAnimate::create(ma);
CCActionInterval * run=CCMoveTo::create(15.0f,ccp(mysize.width-20,mysize.height/2));
CCFiniteTimeAction * spw=CCSpawn::create(an,run,NULL);
sp->runAction(spw);
//-new-//
好了运行一下看看。
OK,成功。
最后还要说一下,使用缓存帧创建动画, 文件会被缓存起来占用内存,所以,我们不用了,记得要用
CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFrameByName();
把缓存的文件删掉哦,要不然一多的话。。。。
你懂得