程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> cocos2d-x自制工具01:AnimatePacker測試版發布!!~!

cocos2d-x自制工具01:AnimatePacker測試版發布!!~!

編輯:關於C語言

 

  一、引子   哦,好吧,我一直比較吐槽cocos2d-x那個動畫加載方式,記得我在《cocos2d-x學習筆記04:簡單動畫》中寫的,一個簡單動畫的加載,就需要寫十幾行代碼。  
  1. CCSize s = CCDirector::sharedDirector()->getWinSize(); 
  2.  
  3. //#1:生成動畫需要的數據類 
  4. CCTexture2D *texture=CCTextureCache::sharedTextureCache()->addImage("pic2476.png"); 
  5. CCSpriteFrame *frame0=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*0, 48*0, 32, 48)); 
  6. CCSpriteFrame *frame1=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*1, 48*0, 32, 48)); 
  7. CCSpriteFrame *frame2=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*2, 48*0, 32, 48)); 
  8. CCSpriteFrame *frame3=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*3, 48*0, 32, 48)); 
  9.  
  10. CCMutableArray<CCSpriteFrame*> *animFrames = new CCMutableArray<CCSpriteFrame*>(4); 
  11. animFrames->addObject(frame0); 
  12. animFrames->addObject(frame1); 
  13. animFrames->addObject(frame2); 
  14. animFrames->addObject(frame3); 
  15.  
  16. CCAnimation *animation = CCAnimation::animationWithFrames(animFrames, 0.2f); 
  17. animFrames->release();  
  18. //#2:初始化並設置Sprite 
  19. CCSprite *sprite = CCSprite::spriteWithSpriteFrame(frame0);//設置一個初始frame 
  20. sprite->setPosition( ccp( s.width/2, s.height/2) ); 
  21. addChild(sprite); 
  22.  
  23. //#3:使用animation生成一個動畫動作animate 
  24. CCAnimate *animate = CCAnimate::actionWithAnimation(animation, false); 
  25. sprite->runAction(CCRepeatForever::actionWithAction(animate));//重復播放 


恩,這其中加載的代碼占了好多,我們可以通過刷循環簡化。也就是說,理論上至少可以減少大約一半的量。
但是你刷循環簡化有個前提:png的排列必須十分規律,否則是無法使用的。並且,不同的動作有不同的幀數和不同的delay,你每個都要自己寫。這毫無疑問是一個非常繁瑣的過程。
於是我開發了一個工具AnimatePacker,專門解決這個問題。顧名思義,AnimatePacker就是一個動作打包的小工具,可以很方便的自己編輯動作。由此節省大量的程序編碼。
二、AnimatePacker使用
這個工具要和TexturePacker等工具配合使用,因為需要他們來提供plist。另外,要使用這個工具,必須先熟悉TexturePacker等工具,以及cocos2d-x的動畫代碼。
打開界面,一目了然。熟悉cocos2d-x編程的人,肯定知道這四個框是什麼。

Plists:所有的Plist列表,拖動plist文件到AnimatePacker窗口上,就可以加載。 Animations:所有的動作列表,點擊“攝像機”按鈕可以新建動作,雙擊可以編輯Name和Delay。 SpriteFrames:當前Animation對應的SpriteFrames列表,拖動可以排序。 Sprites:所有的備選Spirte,你可以拖動Spirte到SpriteFrames框下面。
簡單使用步驟: 1.拖動plist文件到AnimatePacker窗口 2.點擊攝像機,生成新的Animation,在Animations框中編輯Name和Delay 3.從Sprites裡拖動Sprite到SpriteFrames,拖動SpriteFrame可排序
就這樣不斷的編輯和生成即可。 最後,我們點擊保存,就可以輸出一個自己的xml。這裡我們就叫他“1111.xml”好了。
三、解析代碼使用
解析1111.xml需要用到下面三個文件:
  1. AnimatePacker.h 
  2. AnimatePacker.cpp 
  3. Singleton.h //需要導入的支持文件 

解析代碼非常簡單,只有兩個接口:
  1. void AnimatePacker::loadAnimate(char *path);//加載xml裡面的動畫 
  2. cocos2d::CCAnimate* AnimatePacker::getAnimate(char *name);//獲取指定名稱的動畫 

具體寫起來大約是這樣的:
  1. AnimatePacker::getInstance()->loadAnimate("1111.xml"); 
  2. CCSprite *sprite=CCSprite::spriteWithSpriteFrameName("bomb_dead0.png"); 
  3. sprite->setAnchorPoint(CCPointZero); 
  4. sprite->setPosition(ccp(size.width/2, size.height/2)); 
  5. sprite->runAction(CCRepeatForever::actionWithAction(AnimatePacker::getInstance()->getAnimate("aaa"))); 
  6. addChild(sprite,1); 

AnimatePacker采用Qt編寫,也就是說可以跨多個平台。但目前只有win32版,因為mac下我還沒配qt開發環境,稍後提供。 這個工具現在是測試版,歡迎提供bug和改進意見,直接在下面回復就行了。

本文出自 “老G的小屋” 博客,請務必保留此出處http://4137613.blog.51cto.com/4127613/779533

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved