cocos2d-x基本知识点(7):动画

动画类

动画类CCAnimate也是一种动作,要实现CCAnimate,还需要定义CCAnimation等类

CCAnimationCache类是一个单例,用于缓存所有的动画和动画帧,使用如下:

CCAnimationCache::sharedAnimationCache()->addAnimation(animation,"dance");

CCAnimationCache* animCache = CCAnimationCache::sharedAnimationCache();

CCAnimation* normal = animCache->animationByName("dance");

CCAnimationFrame的使用:

CCSpriteFrame* frame = (CCSpriteFrame*)pObj;

CCAnimationFrame* animFrame = new CCAnimationFrame();

animFrame->initWithSpriteFrame(frame,1,NULL);//精灵帧,该动画帧延迟时间,CCDictionary类型的信息

CCAnimation就是动画,存储一个动画动作需要的所有帧,可以通过帧的数组定义

CCArray* animFrames = CCArray::create();

char tmp[50];

for(int j = 0;j <14; ++i){

sprintf(tmp,"grossini_dance_%02d.png",j+1);

CCSpriteFrame* frame = cache->spriteFrameByName(tmp);

animFrames->addObject(frame);

CCAnimation* animation = CCAnimation::create(animFrame,0.3f);

CCAnimate 动画动作就是一个动作类,可以通过CCAnimation动画来定义CCAnimate动画动作:

sprite->runAction(CCRepeateForever::create(CCAnimate::create(animation)));

cocos2d-x 中的动画使用实例:

AnimationCache::AnimationCache(){

CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();

frameCache->addSpriteFrameWithFile("animations/grossini.plist");

frameCache->addSpriteFrameWithFile("animations/grossini_gray.plist");

frameCache->addSpriteFrameWithFile("animations/grossini_blue.plist");

CCArray* animaFrames = CCArray::create(15);

char str[100] = {0};

for(int i = 1;i <15;++i){

sprintf(str,"grossini_dance_%02d.png",i);

CCSpriteFrame* frame = frameCache->spriteFrameByName(str);

animFrames->addObject(frame);

}

CCAnimation* animation = CCAnimation::create(animFrames,0.2f);

CCAnimationCache::sharedAnimationCache()->addAnimation(animation,"dance");

animFrames->removeAllObjects();

for(int i = 1;i <15;++i){

sprintf(str,"grossini_dance_gray_%02d.png",i);

CCSpriteFrame* frame = frameCache->spriteFrameByName(str);

animFrames->addObject(frame);

}

animation = CCAnimation::create(animFrames,0.2f);

CCAnimationCache::sharedAnimationCache()->addAnimation(animation,"dance_gray");

animFrames->removeAllObjects();

for(int i = 1;i < 4;++i){

sprintf(str,"grossini_blue_%02d.png",i);

CCSpriteFrame* frame = frameCache->spriteFrameByName(str);

animFrames->addObject(frame);

}

animation = CCAnimation::create(animFrames,0.2f);

CCAnimationCache::sharedAnimationCache()->addAnimation(animation,"dance_blue");

CCAnimationCache* animCache = CCAnimationCache::sharedAnimationCache();

CCAnimation* normal = animCache->animationByName("dance");

normal->setRestoreOriginalFrame(true); // 动画播放完毕后回到初始帧

CCAnimation* dance_grey = animCache->animationByName("dance_grey");

dance_grey->setRestoreOriginalFrame(true);

CCAnimation* dance_blue = animCache->animationByName("dance_blue");

dance_blue->setRestoreOriginalFrame(true);

CCAnimate* animN = CCAnimate::create(normal);

CCAnimate* animG = CCAnimate::create(dance_grey);

CCAnimate* animB = CCAnimate::create(dance_blue);

CCFiniteTimeAction seq = CCSequence::create(animN,animG,animB,NULL);

CCSprite* grossini = CCSprite::create();

CCSpriteFrame* frame = frameCache->spriteFrameByName("grossini_dance_01.png");

grossini->setDisplayFrame(frame);

CCSize winSize = CCDirector::sharedDirector()->getWinSize();

grossini->setPosition(ccp(winSize.width/2,winSize.height/2));

addChild(grossini);

grossini->runAction(seq);

}

通过plist文件定义动画:

CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();

frameCache->addSpriteFramesWithFile("animations/grossini.plist");

frameCache->addSpriteFramesWithFile("animations/grossini_gray.plist");

frameCache->addSpriteFramesWithFile("animations/grossini_blue.plist");

CCAnimationCache::purgeSharedAnimationCache();

CCAnimationCache* animCache = CCAnimationCache::sharedAnimationCache();

animCache->addAnimationsWithFile("animations/animations.plist");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值