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

原文地址:https://www.cnblogs.com/jeekun/p/2864681.html