Cocos2d-x 3.x plist+png 做动画
***************************************轉載請注明出處:http://blog.csdn.net/lttree******************************************
前言:
這次的東西,事實上是在做完2048后,我有個Flash想用。
就像,天天系列。開頭會有 ”提米“ 的叫聲+動畫, 是不是感覺非常帶感。
之前。做第一個游戲的時候,有做一套78幀的Flash,
可是當時不會用,如今正好拿過來用了。嘿嘿~
正文:
這次樣例,就拿我這幾天想做的 FlappyBird 的小鳥為例吧:
1.首先,我們先來做須要的資源。
這個有三個層次(眼下我知道的)
① 載入每一個圖片
② 把全部圖片壓縮到一張圖片中。然后切割取出。
③借助于plist文件與png共同取出圖片。
前兩種,比較簡單。并且效率不是非常高,我就直接用這三者最好的,plist+png
事實上,plist通常是用在mac上的,
在windows制作plist能夠用 TexturePacker,
(能夠在這里下載:https://www.codeandweb.com/texturepacker/download?)
很方便的一個工具。
安裝完成,打開,須要選擇你的引擎,當然我們選擇的是cocos2d的:
打開以后,會出現例如以下界面:
這個工具的使用細節,我不是非常懂= =。
具體的能夠問問度娘。
我僅僅知道,點上面那個button,加入,你所須要壓縮在PNG里的圖片:
這個技巧不須要我多說了吧:
按住Ctrl 能夠單個多選,
按住Shift能夠連續多選。
選出圖片。并把他們增加進來。
假設沒有圖片,拿以下的湊合一下吧:
然后點擊 左上角 的Filebutton:
然后,在下拉的菜單中,選 ?Public sprite sheet 。然后就選擇存放 PNG和PLIST的文件夾:
先是plist文件夾,然后是PNG文件夾。最好兩個文件名稱是一樣的。
接著,就會給你輸出出來了:
OK,你就能夠到存放的地方看你所生成的兩個文件了。
2.接下來就是Cocos2d-x ?中調用部分了。
把兩個文件(plist和png) 拷貝到Resource 里面。
在VS2012 中 右鍵點擊Resource 目錄。加入->現有項,將兩者加入進來。
這里。我就直接在HelloWorld界面,放小鳥飛行動畫了。
在HelloWorldScene.cpp的Init函數中增加,例如以下代碼:
// ①創建緩存,將圖片讀取進來CCSpriteFrameCache * cache = CCSpriteFrameCache::sharedSpriteFrameCache(); cache -> addSpriteFramesWithFile("hero_bird.plist");// ②創建第一幀,設置位置,增加到當前場景CCSprite *sp = CCSprite::createWithSpriteFrameName("bird_hero_01.png");sp -> setPosition(Point(visibleSize.width/3,visibleSize.height/2));this -> addChild( sp );// ③創建集合,存每一張圖片Vector< SpriteFrame* > sfme = Vector< SpriteFrame* >::Vector();char str[20] = {0};for( int i = 1 ; i < 4 ; ++i ){// ④ 獲取圖片名字,增加到集合中sprintf(str,"bird_hero_%02d.png",i);SpriteFrame *fname = cache -> spriteFrameByName( str );sfme.pushBack( fname );}// ⑤ 創建動畫,設置播放速度CCAnimation *animation = CCAnimation::createWithSpriteFrames( sfme , 0.1f );sp -> runAction ( CCRepeatForever::create(CCAnimate::create(animation )));
來解釋一下:
前面①、② 無需多說,
③,這個曾經用CCArray或者Array,
如今不行了,反正我是3.0和3.2都不能用Array。會在⑤
createWithSpriteFrames出問題,
由于追到這個函數定義。能夠發現:
Animation* Animation::createWithSpriteFrames(const Vector<SpriteFrame*>& frames, float delay/* = 0.0f*/, unsigned int loops/* = 1*/) {Animation *animation = new Animation();animation->initWithSpriteFrames(frames, delay, loops);animation->autorelease();return animation; }
它的第一個參數必須為:const Vector<SpriteFrame*>& frames
這點就要和 ?之前版本號不同,要注意一下。
然后是 ④
這個獲取圖片名字。為什么是:
sprintf(str,"bird_hero_%02d.png",i); 呢?
由于%02d,能夠保證,取i后,不夠的用0補足。
比方,假設是%d,
當i等于1, 獲取的名字是: bird_hero_1
而%02d。獲取名字是: bird_hero_01
Ok,執行一下,就能夠發現小鳥在飛翔啦~
PS:怎樣作為一個開場動畫呢?
我的方法就是在上述代碼后,加一句計劃任務。
多長時間后的跳轉:
this->scheduleOnce(schedule_selector(InkmooFlash::jumpToMain), 4);
這樣,算好播放一幀多久。總共多少幀,就能夠做成開場動畫啦~。~
***************************************轉載請注明出處:http://blog.csdn.net/lttree******************************************
版權聲明:本文博主原創文章,博客,未經同意不得轉載。
轉載于:https://www.cnblogs.com/blfshiye/p/4797222.html
總結
以上是生活随笔為你收集整理的Cocos2d-x 3.x plist+png 做动画的全部內容,希望文章能夠幫你解決所遇到的問題。