动画类
动画类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");