cocos2dx中集成了spine骨骼動畫的功能,可以通過.atlas、.json、.png三個文件來生成骨骼動畫。
1.使用spine前的准備
我們在www.cocos.com中下載的cocos2d-x-4.0引擎中默認使用的spine是舊版的C風格的,且引擎在創建工程后CMAKE構建工程時默認關閉了spine,舊版4.0引擎即使開啟了spine但在編譯的時候仍然會出錯,所以我們需要通過以下幾個步驟來升級引擎中的spine模塊。
1.1 下載新版引擎源碼
https://github.com/cocos2d/cocos2d-x
去github上下載最新的源碼,下載下來后解壓,打開文件夾:
先嘗試運行download-deps.py,看能否下下來依賴包,不過由於網絡原因應該是下不下來,我就是沒有下載下來所以才通過其他途徑實現。如果能完成新引擎的安裝配置的話直接就使用新版的引擎構建工程,之后的步驟就都可以跳過。
1.2移植源碼到原引擎
如果無法完成新引擎的安裝的話,就需要把新引擎的源碼中的spine部分移植到之前我們在官網中下載的引擎當中,spine源碼的路徑在cocos/editor-support/spine里,打開后如圖所示:
我們復制所有此文件夾下的內容,將我們原來的引擎的這個文件夾中的內容清空后再粘貼進來。
1.3在cmakelist中開啟spine模塊
在原引擎目錄下的cocos文件夾中有一個CMakeList文件,打開它后搜索spine,會看到如下圖所示內容:
將該行后面的OFF改為ON,保存退出。
1.4構建工程
然后使用引擎去構建工程,此時得到的工程就是集成了C++風格spine模塊的工程了。
2.創建骨骼動畫
使用骨骼動畫需要在頭文件中包含#include<spine/spine.h>,#include<spine/spine-cocos2dx.h>。
1. 直接創建骨骼動畫
1 auto dragonanimaion = SkeletonAnimation::createWithFile("C:/dragon.json", "C:/dragon.atlas");//通過.json和.atlas兩個文件創建骨骼動畫 2 dragonanimaion->setAnimation(0, "flying", 1);//設置骨骼動畫狀態 3 dragonanimaion->setPosition(0,0); 4 this->addChild(dragonanimaion, 1);
這種方法是最簡單的創建骨骼動畫的方法,但花費的時間較長,構造動畫語句在運行時花費了70ms的時間,這對於一個游戲來說時不可接受的,所以要對動畫進行預加載。
2. 預加載后創建骨骼動畫
通過對SkeletonAnimation::createWithFile()函數源碼的觀察我們得到了如下的方法來創建一個骨骼動畫數據
1 TextureLoader* textureLoader = new Cocos2dTextureLoader(); 2 auto _atlas = new (__FILE__, __LINE__) Atlas("C:/dragon.atlas", textureLoader, true);//加載.atlas 3 auto _attachmentLoader = new (__FILE__, __LINE__) Cocos2dAtlasAttachmentLoader(_atlas); 4 SkeletonJson json(_attachmentLoader); 5 json.setScale(1); 6 SkeletonData* skeletonData = json.readSkeletonDataFile("C:/dragon.json");//加載.json后得到骨骼動畫數據
在游戲的loading界面將我們所要使用的骨骼動畫用上述方法預加載后,使用時調用SkeletonAnimation::createWithData(skeletonData)就可以創建出動畫,所使用的時間小於1ms,這樣在游戲過程中創建動畫就不會導致幀率降低了。