您的位置:首页 >> Cocos2d-x >> 和屌丝一起学cocos2dx-基本动画制作优化篇

和屌丝一起学cocos2dx-基本动画制作优化篇

[ 孤狼 | 2015-02-09 17:19:55 | Cocos2d-x | 2707°C | 0条评论 ]
声 明

本教程仅用于初学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();


       把缓存的文件删掉哦,要不然一多的话。。。。


       你懂得


本节DEMO下载


转载请注明出处:http://gl.paea.cn/n.php?n=24
 
如您看得高兴,欢迎随意投喂,让我们坚持创作!
赞赏一个鸡腿
还没有人留下遗迹
综合 · 搜索