cocos2d-x中制作动画

如何在游戏中生成动画呢?我们在这里介绍两种方法:

第一种方法:使用单个序列帧生成动画:

首先在头文件中定义一个动画的函数:CCAnimate *createAnimate1();

 

然后再源文件中实现动画:

序列帧:name1.png name2.png name3.png name4.png name5.png name6.png

 

CCSprite *mSprite = CCSprite::create(name1.png);

mSprite->setPosition(ccp(PositionX,PositionY));

this->addChild(mSprite);

mSprite->runAction(createAnimate1());

 

动画实现部分:

CCAnimate *类名::createAnimate1()

{

     int iFrameNum = 6;

     CCSpriteFrame *frame = NULL;

     CCArray *frameArray = CCArray::create();

 

//使用一个列表保存所有的CCSpriteFrame对象

     for(ing i = 1; i<=iFrameNum)

    {

frame = CCSpriteFrame::create(CCString::createWithFormat(name%d.png,i)->getCString,

CCRectMake(0,0,width,height));

frameArray->addObject(frame);

     }

//使用CCSpriteFrame列表创建动画

CCAnimation *animation = CCAnimation::createWithSpriteFrames(frameArray);

animation->setLoops(-1);//-1表示循环执行动画,0表示不循环执行动画

animation->setDelayPerUnit(0.5f);//0.5f表示每隔0.5秒钟的时间执行一帧

 

//将动画包装成一个动作

CCAnimate *action = CCAnimate::create(animation);

 

return action;

}

 

该方法就是使用单个动画帧实现动画的原理方法;下面我们看看如何使用plist文件和打包图集实现动画。

 

第二种方法:如何使用plist文件来实现动画

首先在头文件中定义一个动画的函数:CCAnimate *createAnimate2();

 

然后再源文件中实现动画:

序列帧:name1.png name2.png name3.png name4.png name5.png name6.png所生成的打包文件分别为:name.plist  name.png

 

CCSprite *mSprite = CCSprite::create(“name1.png”);

mSprite->setPosition(ccp(PositonX,PositionY));

this->addChild(mSprite);

mSprite->runAction(createAnimate2());

 

CCAnimate *类名::createAnimate2()

{

//加载动画帧到缓冲池中

CCSpriteFrameCache *frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();

frameCache->addSpriteFramesWithFile(“name.plist”,”name.png”);

 

int iFrameNum = 6;

CCSpriteFrame *frame = NULL;

CCArray *frameArray = CCArray::create();

 

//用一个列表保存所有的CCSpriteFrame对象

for(int i=1; i<=iFrameNum; i++)

{

//CCSpriteFrame缓冲池中获取CCSpriteFrame对象

frame = frameCache->spriteFrameByName(CCString::createWithFormat(“name%d.png”,i)->getCString());

frameArray->addObject(frame);

}

 

//使用CCSpriteFrame列表创建动画对象

CCAnimation *animation = CCAnimation::createWithSpriteFrames(frameArray);

animation->setLoops(-1);//-1表示动画循环执行,0代表不循环执行

animation->setDelayPerUnit(0.5f);//0.5f表示的是每隔0.5秒钟执行一帧

 

//将动画包装成一个动作

CCAnimate *action = CCAnimate::create(animation);

return action;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值