我不需要知道你有多少幀之動畫建立輔助類
今天心情不好,所以我可能會比平時嘮叨。
(小若:你心情不好,那為毛要連累我們!)
OK,今天不是寫教程,只是想給大家分享一下簡單的心得。想必大家都覺得Cocos2d-x要建立一個CCAnimation還是有點繁瑣的,是的,通常我們都會建立一個輔助類,這樣就可以說省去重複的工作了。
(小若:快點進入正題,我也沒有心情吐槽。)
笨木頭花心貢獻,啥?花心?不呢,是用心~
轉載請註明,原文地址:http://blog.csdn.net/musicvs/article/details/8567220
本文:
比如,我們通常會看到這樣的輔助類:
CCAnimation* AnimationUtil::createAnimationWithSingleName( const char* singleName, int iFrameNum ) {CCSpriteFrameCache* spriteFrameCache = CCSpriteFrameCache::sharedSpriteFrameCache();CCSpriteFrame* frame = NULL;CCArray* frameArray = CCArray::create();for(int i = 1; i <= iFrameNum; i++){frame = spriteFrameCache->spriteFrameByName(CCString::createWithFormat("%s%d.png", singleName, i)->getCString());frameArray->addObject(frame);} return CCAnimation::createWithSpriteFrames(frameArray);}
當然了,我預設動作圖片都是用TexturePacker打包過的,這不在本文的討論範圍內。
(小若:我不懂,難道我還會告訴你?)
這是我們用到的圖片資源:
這是圖片對應的設定檔,大家可以雙擊開啟看看:
(小若:啊!看你妹紙啊!怎麼雙擊啊,你擊給我看啊!明明是圖片啊好不好!)
由於hero1.plist檔案太長了,我就不貼出來了,大家自己隨便弄一個動作資源吧。
(小若:你今天的心情是有多不好。。。)
然後試試使用這個函數:
CCAnimation* heroAnim = AnimationUtil::sharedAnimationUtil()->createAnimationWithSingleName("hero1_atk", 6);heroAnim->setLoops(-1);heroAnim->setDelayPerUnit(0.1f);sprite->runAction(CCAnimate::create(heroAnim));
挺簡單的,挺好的,指定了圖片資源的名稱,指定了圖片資源的幀數,然後createAnimationWithSingleName就會建立好CCAnimation對象。這個方法在百度一搜,也能搜到不少。
這是一個很不錯的方法,只需用一句話就能建立一個動畫對象,很好,那麼,本次教程就到此結束了。
(小若:總感覺有什麼不對勁。。。。不對啊!你不是要告訴我們更好的方法嗎?!)
不過,有個更方便的方法:
CCAnimation* AnimationUtil::createAnimationWithSingleName( const char* singleName ) {CCSpriteFrameCache* spriteFrameCache = CCSpriteFrameCache::sharedSpriteFrameCache();int index = 1;CCSpriteFrame* frame = NULL;CCArray* frameArray = CCArray::create();do {frame = spriteFrameCache->spriteFrameByName(CCString::createWithFormat("%s%d.png", singleName, index)->getCString());if(frame == NULL) {break;}frameArray->addObject(frame);index++;} while (true);return CCAnimation::createWithSpriteFrames(frameArray);}
和之前的方法唯一的區別就是:
1. For迴圈換成了do while迴圈
2. 不需要指定幀數
(小若:唯一的區別竟然有兩點。。。唯一。。。唯一是這樣的嗎!唯一那就應該只有一點啊!)
這個函數會根據指定的資源名稱一直載入圖片幀,直到遇到空值為止,雖然這有點投機取巧的味道,但是可以省去一件很麻煩的事情,那就是:指定動畫的幀數。
我們把圖片用TexturePacker打包好之後,不可能每次載入一個動畫,就開啟pilist檔案去看看這個動畫有多少幀吧?反正我是覺得這樣好麻煩,所以就想出這個投機的方法。
僅供參考~!
好了,其實我不太想發表這篇文章的,我也知道寫得不好(心情實在糟糕,抱歉),但是我怕改天忘了,所以還是寫了。
(小若:就算你這麼說,我也不會原諒你的!)