使用CCSpriteBatchNode實現動畫效果

使用CCSpriteBatchNode實現動畫效果



//每當屏幕繪製一個紋理的時候,就要經過三個工作:準備渲染、渲染圖形和渲染後的清除。這些工作產生了渲染一個紋理所固有的開銷,所以要讓硬件知道需要渲染的這一組精靈或動作幀,使用的是同一個紋理。這樣,圖形硬件就會爲這組精靈只進行一次準備、渲染、和清除工作了。使用CCSpriteBatchNode就可以做到這一點。

//CCSpriteBatchNode的工作原理如下:

//1、創建一個CCSpriteBatchNode對象,通過傳遞一個包含所有精靈圖片的紋理圖冊的名字作爲參數,並把它加入到當前場景中。

//2、接下來,從紋理圖冊中創建的任何精靈,應該把它當作CCSpriteBatchNode的一個孩子加進去。只要精靈包含在紋理圖冊中,那麼就沒問題,否則會出錯。

//3CCSpriteBatchNode可以智能地遍歷它所有孩子結點,並通過一次渲染工作來渲染這些孩子,而不是每個精靈都進行一次渲染,這樣渲染速度就會更快了



我們在boolHelloWorld::init()添加如下代碼:

if ( !CCLayer::init() )
    {
        return false;
    }
                       
                       
                       
    CCAnimation* animation = CCAnimation::create();
                       
                       
    CCSpriteBatchNode* node = CCSpriteBatchNode::create("grossini.png");
    this->addChild(node);
                       
    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("grossini.plist");
                       
    for (int i = 1; i < 15; i++)
    {
        CCString* str = CCString::createWithFormat("grossini_dance_%02d.png",i);
        const char* ch = str->getCString();
        CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
        CCSpriteFrame* frame = cache->spriteFrameByName(ch);
        animation->addSpriteFrame(frame);
    }
                       
    animation->setDelayPerUnit(0.3f);
    CCAnimate* animate = CCAnimate::create(animation);
    CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
                       
    CCSprite* sprite = CCSprite::createWithSpriteFrame(cache->spriteFrameByName("grossini_dance_01.png"));
    sprite->setPosition(ccp(100, 100));
                       
    node->addChild(sprite);
                       
    sprite->runAction(CCRepeatForever::create(animate));


代碼下載例子:Hi,推薦文件給你 "動畫例子4.zip" http://vdisk.weibo.com/s/Hw4G7

http://pan.baidu.com/share/link?shareid=260459325&uk=3189484501





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章