前端之家收集整理的这篇文章主要介绍了
cocos2d-x 2.x创建帧序列动画,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
手动添加的方法需要将每一帧要显示的精灵有序添加到Animation类中,并设置每帧的播放时间,让动画能够匀速播放。另外,还要通过setRestoreOriginalFrame来设置是否在动画播放结束后恢复到第一帧。创建好Animation实例后,需要创建一个Animate实例来播放序列帧动画。
CCAnimation *animation = CCAnimation::create();
for (int i = 1; i <= 4; i++)
{
char szName[100] = {0};
sprintf(szName,"an1_anim%d.png",i);
animation->addSpriteFrameWithFileName(szName);
}
animation->setDelayPerUnit(2.8f/14.0f);
animation->setRestoreOriginalFrame(true);
CCAnimate *action = CCAnimate::create(animation);
CCSprite *sprite = CCSprite::create("an1_anim1.png");
sprite->setPosition(ccp(100,100));
this->addChild(sprite);
sprite->runAction(action);
在创建Animation实例时会用到以下几个接口:
- addSpriteFrame,添加精灵帧到Animation实例
- setDelayUnits,设置每一帧持续时间,以秒为单位
- setRestoreOriginalFrame,设置是否在动画播放结束后恢复到第一帧
- clone,克隆一个该Animation实例
/*加载图片帧到缓存池*/
CCSpriteFrameCache *frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
//3.x版本获得缓存池方法如下
//SpriteFrameCache *frameCache = SpriteFrameCache::getInstance();
frameCache->addSpriteFramesWithFile("scene1atlasiPhone.plist");
hero = CCSprite::createWithSpriteFrameName("sv_anim_10.png");
hero->setPosition(ccp(100,100));
this->addChild(hero);
int iFrameNum = 15;
CCSpriteFrame *frame = NULL;
CCArray *frameArray = CCArray::create();
/*用一个列表保存所有CCSpriteFrame对象*/
for (int i = 10; i <= 29; i++)
{
frame = frameCache->spriteFrameByName(CCString::createWithFormat("sv_anim_%d.png",i)->getCString());
frameArray->addObject(frame);
}
/*使用CCSpriteFrame列表创建动画对象*/
CCAnimation *animation = CCAnimation::createWithSpriteFrames(frameArray);
animation->setLoops(-1);
animation->setDelayPerUnit(0.1f);
CCAnimate *action = CCAnimate::create(animation);
hero->runAction(action);
/*从缓存池中获取CCSpriteFrame对象*/