cocos2dx動畫Animation介紹

來源:互聯網
上載者:User

標籤:style   class   http   tar   com   get   

一、幀動畫你能夠通過一系列圖片檔案,像例如以下這樣,建立一個動畫:[cpp]  CCAnimation *animation = CCAnimation::create();  //從本地檔案系統中載入圖片檔案到CCSpriteFrame中區,然後加入到CCAnimation中  for (int i = 1; i < 15; i++)  {      char szImageFileName[128] = {0};      sprintf(szImageFileName, "Images/grossini_dance_%02d.png", i);      animation->addSpriteFrameWithFileName(szImageFileName);    }  animation->setDelayPerUnit(2.8f / 14.0f); // 這個動畫包括14幀,將會持續2.8秒.  animation->setRestoreOriginalFrame(true); // 14幀播放完之後返回到第一幀    CCAnimate *action = CCAnimate::create(animation);  sprite->runAction(action);  // 執行精靈對象     注意CCAnimation是由很多精靈幀組成,能夠設定間隔時間,期間等,它實際上是包括著一組資料。CCAnimate是一個動作,它是通過CCAnimation對象建立。二、精靈表動畫雖然手工動畫非常easy理解,但它非常少用在遊戲開發中。相反的,精靈表動畫的方式在2D動畫中常常使用。這是一個精靈表。它實際上就是一系列動畫幀圖片,或者是一個能用於一個情境的圖片集。  在OpenGLES1.1階段,精靈表由於下面幾點被廣泛應用:1、降低檔案讀寫時間。讀取一張圖片比讀取一堆小檔案肯定要快。2、降低記憶體消耗。OpenGL ES 1.1隻可以使用2的幾次方大小的圖片(也就是寬度或者高度是2,4,864,128,256,512,1024,...)。也就是說,OpenGL ES1.1將會分配給每一個圖片2的幾次方大小的記憶體空間,即使你這張圖片達不到這種寬度和高度也會分配大於此圖片的2的n次方大小的空間。那麼運用這種圖片集的方式將會降低記憶體片段。3、降低OpenGL ES繪製調用而且加速渲染。Cocos2d-x v2.0升級到了OpenGL ES2.0.OpenGL ES2.0不會再分配2的幾次方的記憶體塊了,可是降低讀取時間和繪製調用的優勢依舊存在。那麼產生的動畫效果怎樣呢?正如我們所見,精靈表不是動畫的一個必須條件。可是考慮到以上的一些優勢,精靈表還是非常有效率的。在Cocos2dx中,有很多不同的方式來建立精靈表。三、通過.png 和 .plist檔案建立精靈表在cocos2dx 0.x和1.x版本號碼中,CCSpriteSheet就是為以上的目的設計。在V2.0中CCSpriteBatchNode替代了CCSpriteSheet。CCSpriteBatchNode對象包括了全部精靈幀的圖片紋理。即使它不會繪製,你也必需要把它加入到情境中,比如:[cpp]  CCSpriteBatchNode* spritebatch = CCSpriteBatchNode::create("animations/grossini.png");   下一步,你須要運用CCSpriteFrameCache執行個體來確保幀名字相應幀邊界。也就是說,圖片在哪一塊矩形地區中。比如:[cpp]  CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();  cache->addSpriteFramesWithFile("animations/grossini.plist");   一旦你的精靈表和幀載入完畢,而且精靈表已經被加入到了情境中,你能夠通過createWithSpriteFrameName方法來建立精靈。而且通過addChild要加入到精靈表中:[cpp]  m_pSprite1 = CCSprite::createWithSpriteFrameName("grossini_dance_01.png");  spritebatch->addChild(m_pSprite1);  addChild(spritebatch);    createWithSpriteFrameName 方法將會從grossini.plist中找到相應的座標以及矩形地區,之後再裁剪grossini.png的紋理成一個精靈幀。  如今我們建立一個CCArray對象而且天劍全部的幀動畫進去。在這個動畫的範例中,我們發現全部的14幀都有同樣的大小,所以我們能夠用一個嵌套的迴圈遍曆它們,而且當完畢加入14幀之後結束掉迴圈。[cpp]  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);  }   最後,我們須要建立一個CCAnimate動作執行個體來執行CCSprite。以下我們能夠在CCRepeatForever動作中包裹CCAnimate動作來讓它一直執行下去,像這樣:[cpp]  CCAnimation* animation = CCAnimation::createWithSpriteFrames(animFrames, 0.3f);  m_pSprite1->runAction( CCRepeatForever::create( CCAnimate::create(animation) ) );   四、檔案動畫CCAnimateCache可以載入一個描寫敘述一批節點的xml/plist檔案,包含幀名和他們的矩形地區。這個借口很easy使用。[cpp]  CCAnimationCache *cache = CCAnimationCache::sharedAnimationCache(); // 緩衝在cocos2dx中一直是單例模式  cache->addAnimationsWithFile("animations/animations-2.plist");  CCAnimation animation = cache->animationByName("dance_1");  CCAnimate animate = CCAnimate::create(animation);  sprite->runAction(animate);  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.