zoukankan      html  css  js  c++  java
  • 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等工具可以直接创建,暂时先不看这个

  • 相关阅读:
    go时间和日期转换
    go操作mysql
    Python常见错误处理
    C++ 常见问题
    CF605E Intergalaxy Trips
    均分纸牌详解
    P4447 [AHOI2018初中组]分组
    P4537 [CQOI2007]矩形
    P4823 [TJOI2013]拯救小矮人
    P5132 Cozy Glow之拯救小马国
  • 原文地址:https://www.cnblogs.com/jeekun/p/2864681.html
Copyright © 2011-2022 走看看