1、Manual Animation
CCAnimation 就是一系列的图片组成一个动画序列,然后设置下每帧的播放时长。
CCAnimate 是一个动作,Action, 可以由CCAnimation创建,然后Sprite执行runAction.
示例代码:
CCAnimation* animation = CCAnimation::create(); for( int i=1;i<15;i++) { char szName[100] = {0}; sprintf(szName, "Images/grossini_dance_%02d.png", i); animation->addSpriteFrameWithFileName(szName); } // should last 2.8 seconds. And there are 14 frames. animation->setDelayPerUnit(2.8f / 14.0f); animation->setRestoreOriginalFrame(true); CCAnimate* action = CCAnimate::create(animation); m_grossini->runAction(CCSequence::create(action, action->reverse(), NULL));
2、Sprite Sheet Animation
即一张图片上保存了一个动作序列,优势如下:
1、减少I/O次数
2、减少Opengl绘制次数
3、opengl调用图片是采用2^n的方式,因此单个的图片越多,占用的空间越大,不如合成一张。
v2.0之前是采用CCSpriteSheet,现在都采用 CCSpriteBatchNode
示例代码:
1、添加要渲染的图片
CCSpriteBatchNode* spritebatch = CCSpriteBatchNode::create("animations/grossini.png");
2、添加要绘制的帧
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache(); cache->addSpriteFramesWithFile("animations/grossini.plist");
3、现在纹理图和帧信息已经添加了,可以通过FrameName来创建Sprite了,然后添加到BatchNode,统一渲染。
m_pSprite1 = CCSprite::createWithSpriteFrameName("grossini_dance_01.png"); spritebatch->addChild(m_pSprite1); addChild(spritebatch);
4、然后把所有的帧添加到一个CCArray中,然后创建动画。
CCArray* animFrames = CCArray::createWithCapacity(15); char str[100] = {0}; for(int i = 1; i < 15; i++) { sprintf(str, "grossini_dance_%02d.png", i); CCSpriteFrame* frame = cache->spriteFrameByName( str ); animFrames->addObject(frame); } CCAnimation* animation = CCAnimation::createWithSpriteFrames(animFrames, 0.3f); m_pSprite1->runAction( CCRepeatForever::create( CCAnimate::create(animation) ) );
3、File Animation
把动作保存在一个xml/plist文件中,然后读入,直接创建动画。
CCAnimationCache *cache = CCAnimationCache::sharedAnimationCache(); // "caches" are always singletons in cocos2d cache->addAnimationsWithFile("animations/animations-2.plist"); CCAnimation animation = cache->animationByName("dance_1"); // I apologize for this method name, it should be getAnimationByName(..) in future versions CCAnimate animate = CCAnimate::create(animation); // Don't confused between CCAnimation and CCAnimate :) sprite->runAction(animate);
4、Bone Animation
通过CocosBuilder等工具可以直接创建,暂时先不看这个