Cocos2d-x - Animations

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等工具可以直接创建,暂时先不看这个

 

你可能感兴趣的:(cocos2d-x)