以前向Andreas Loew申請了一枚TexturePacker註冊碼,很快都下來了,做爲回報我打算仍是寫一篇關於TexturePacker的使用博客吧,有興趣的能夠在這裏申請密鑰,http://www.codeandweb.com,前不久他也來信回訪過問我使用感受怎樣,由於工做的緣由,太忙了,這裏我主要介紹下cocos2dx中的動畫以及TexturePacker使用。 web
作動畫以前,要準備素材,在demo中的你能夠下載:http://pan.baidu.com/share/link?shareid=1419818902&uk=3088193979 數組
打開TexturePacker, 緩存
這個相信你們都看得懂,這裏選擇cocos2d,而後添加文件夾,該工具會自動加載紋理圖片,選擇打包的紋理圖片以及plist輸出路徑: 工具
各項參數設定完畢,發佈,你會在設置的輸出路徑獲得打包好的圖片以及一個plist文件; 動畫
接下來,介紹下動畫的創做: this
動畫創做有不少中方式,這裏我就採用plist方式來建立動畫;注意幾點 1.精靈幀緩衝;2.精靈幀;3.動畫序列容器;ps:再次建議學2dx的話,有精力, 把源碼翻來看看,由於咱們不少是記不住的 可是原理必定要明白。 spa
這裏直接上建立動畫步驟,demo代碼片斷: code
一、加載plist到緩衝幀裏面,這裏經過數組來建立動畫幀序列; orm
2.將精靈幀添加到數組中; 圖片
3.建立精靈;
4.建立動畫序列幀(注意動畫序列容易這裏CCSequence用類型),最後回調runAction(CCAction *action);
#ifndef __ROLE__HH__ #define __ROLE__HH__ #include "cocos2d.h" USING_NS_CC; class role:public CCLayer { public: role(void); ~role(void); virtual bool init(); static cocos2d::CCScene* scene(); CREATE_FUNC(role); }; #endif
#include "role.h" role::role(void) { } role::~role(void) { } bool role::init() { bool bRet = false; do { //-new-// CCSize mysize=CCDirector::sharedDirector()->getWinSize(); //把role.plist加入緩存幀 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("role/role.plist"); //建立幀數組--數組來保存幀動畫 CCArray * attackArray=CCArray::create(); //attackArray->retain(); CCArray * attackArray2=CCArray::create(); //attackArray2->retain(); CCArray * runArray=CCArray::create(); //runArray->retain(); CCArray * walkArray=CCArray::create(); for (int index=1;index!=9;++index) { //從緩存中獲取精靈幀添加到數組中 CCLOG(CCString::createWithFormat("%s%d.png","Img_Zhici",index)->getCString()); attackArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()-> spriteFrameByName(CCString::createWithFormat("%s%d.png","Img_Zhici",index)->getCString())); } //Img_Zhn1.png for (int i=1;i!=17;++i) { //從緩存中獲取精靈幀添加到數組中 CCLOG(CCString::createWithFormat("%s%d.png","Img_Zhn",i)->getCString()); attackArray2->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()-> spriteFrameByName(CCString::createWithFormat("%s%d.png","Img_Zhn",i)->getCString())); } //run for (int i=1;i!=7;++i) { CCLOG(CCString::createWithFormat("%s%d.png","Img_ZRun",i)->getCString()); runArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()-> spriteFrameByName(CCString::createWithFormat("%s%d.png","Img_ZRun",i)->getCString())); } //walk for (int i=1;i!=7;++i){ CCString::createWithFormat("%s%d.png","Img_Zwlak",i)->getCString(); walkArray->addObject( CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName( CCString::createWithFormat("%s%d.png","Img_Zwlak",i)->getCString())); } //建立攻擊類型1 精靈 CCSprite * sp=CCSprite::createWithSpriteFrame((CCSpriteFrame*)attackArray->objectAtIndex(0)); sp->setPosition(ccp(mysize.width/4,mysize.height/3)); this->addChild(sp); //建立攻擊類型2精靈 CCSprite * standAttack=CCSprite::createWithSpriteFrame((CCSpriteFrame*)attackArray2->objectAtIndex(0)); CCSize visibleSize= CCDirector::sharedDirector()->getVisibleSize(); standAttack->setPosition(ccp(visibleSize.width/3,visibleSize.height/3)); this->addChild(standAttack); //經過數組中的第一個精靈幀 建立奔跑精靈 CCSprite *runsprite=CCSprite::createWithSpriteFrame((CCSpriteFrame*)runArray->objectAtIndex(0)); runsprite->setPosition(ccp(visibleSize.width/2,visibleSize.height/3)); this->addChild(runsprite); CCSprite *walkSprite=CCSprite::createWithSpriteFrame((CCSpriteFrame*)walkArray->objectAtIndex(0)); walkSprite->setPosition(ccp(visibleSize.width/1.5,visibleSize.height/3)); this->addChild(walkSprite); //建立動畫 CCAnimation *animation1=CCAnimation::createWithSpriteFrames(attackArray,0.1f); CCAnimate *attack1=CCAnimate::create(animation1); CCAnimation * standAnimation=CCAnimation::createWithSpriteFrames(attackArray2,0.1f); CCAnimate *standAnimate=CCAnimate::create(standAnimation); CCAnimation * runAnimation=CCAnimation::createWithSpriteFrames(runArray,0.1f); CCAnimate *runAnimate=CCAnimate::create(runAnimation); CCAnimation * walkAnimation=CCAnimation::createWithSpriteFrames(walkArray,0.15f); CCAnimate *walkAnimate=CCAnimate::create(walkAnimation); //CCSequence動做序列容器 CCSpawn CCSequence* pse1=CCSequence::create(attack1,NULL); CCSequence* pse2=CCSequence::create(standAnimate,NULL); CCSequence* pse3=CCSequence::create(runAnimate,NULL); CCSequence* pse4=CCSequence::create(walkAnimate,NULL); //執行動做 forerver sp->runAction(CCRepeatForever::create(pse1)); standAttack->runAction(CCRepeatForever::create(pse2)); runsprite->runAction(CCRepeatForever::create(pse3)); walkSprite->runAction(CCRepeatForever::create(pse4)); CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFramesFromFile("role/role.plist"); bRet=true; } while (0); return bRet; } cocos2d::CCScene* role::scene() { CCScene * scene = NULL; do { scene = CCScene::create(); CC_BREAK_IF(! scene); role *layer = role::create(); CC_BREAK_IF(! layer); scene->addChild(layer); } while (0); return scene; }
源碼在這裏以及打包好的資源:http://pan.baidu.com/share/link?shareid=1535353761&uk=3088193979
ps:關於TexturePacker做者,很厲害 也是很熱情的 ,key在你申請以後會很快發放下來呵呵,感謝他提供這樣優秀的工具!