官方源代碼已經更新,大家可以下載使用。如果有想使用cocos2dx風格的代碼使用方式可以繼續閱讀。其中方法的4.5版本也是經過重構后的,我的還是基於官方4.0版本的代碼編寫的,由於近期工作原因沒有時間維護和升級,望大家見諒。后期我還會抽時間把官方的代碼進行cocos2d風格重寫,敬請期待。下面提供官方源碼和我早起源碼,供大家參考學習。謝謝支持!
Dragonbones 4.5源代碼下載地址:https://github.com/DragonBones/DragonBonesCPP
前言
從事cocos2dx開發三年多了,一直沒有找到比較好的骨骼工具。后來接觸了dragonbones,僅管cocos對dragonbones有支持,但是也僅限2.2版本,並一直都不更新。官方有c++源代碼,但是代碼看起來很亂,代碼的風格也不那么讓人接受接口使用不清晰。動畫要在flash里編輯,顯示不清晰,導出特定格式,非常繁瑣。spine收費。cocos官方提供的骨骼動畫用起來也不是很舒服,各種問題,並且cocos2dx都出好多版本骨骼動畫卻很少更新。
由於我的項目中使用的是dragonbones 2.3版本(比2.2版本有很大更新)的官方c++源代碼,使用過程中遇到很多問題,包括內存泄露、接口不清晰(創建一個骨骼要調用很多的方法才能完成)等問題,於是我就打算花一定的時間對dragonbones的代碼進行一次重構。到目前為止已經重構完成。
為什么推薦各位使用dragonbones,因為使用dragonbones 4.x代碼可以統一之前大多數骨骼,無論你是使用spine、cocos 1.x(骨骼)、dragonbones2.2/2.3等骨骼文件,都可以通過Dragonbones pro工具轉換成4.x版本數據格式並應用到游戲中,減少了成本。
源代碼和工具
Dragonbones 4.5源代碼下載地址:https://github.com/Relvin/dragonbones
Dragonbones pro官方動畫編輯器:http://dragonbones.github.io/
平台支持
目前代碼支持Mac、Ios、Android、Win32平台,大家可以在project目錄下找到相關的項目配置文件。
項目配置
首先在項目的cocos2dx的統計目錄下創建一個dragonbones目錄,然后把dragonbones 4.5代碼放在當前目錄下,目錄結果如下:
目錄結構完成后,下面我來介紹如何在不同平台中配置項目:
一、Mac/Ios項目配置:
1、添加項目到工程:打開xcode,項目【右鍵】---->【Add Files to...】---->【選擇dragonbones項目文件】
2、配置頭文件搜索路徑:選擇【項目文件】---->【Build Settings】
搜索“User Header Search Paths”---->添加最后一行的路徑。
3、添加鏈接庫:分別選擇不同平台的【target】---->【General】---->【Linked Frameworks and Libraries】---->添加對應的庫文件
二、Android項目配置:
打開Android項目所在目錄,找到jni/Android.mk文件並添加下圖兩處信息。完成!
三、Win32端項目配置:
1、vs打開項目工程(注:我用的是VS2013,界面上可能會顯示不一樣),在解決方案上【右鍵】---->【添加】---->【現有項目】---->選擇dragonbones 【project/proj.win32/libDragonbones.vcxproj】
2、打開主工程(啟動工程)的屬性頁,添加對libdragonbones庫引用,然后在c++頭文件搜索路徑中添加dragonbones頭文件搜索路徑,如下:
創建骨骼動畫
一、使用方法
#include "DragonBonesHeaders.h" using namespace dragonBones; void HelloWorld::addUbbie() { Size winSize = Director::getInstance()->getWinSize(); dragonBones::DBCCFactory::getInstance()->loadDragonBonesData("res/Ubbie/Ubbie.xml","Ubbie"); dragonBones::DBCCFactory::getInstance()->loadTextureAtlas("res/Ubbie/texture.xml","Ubbie"); dragonBones::DBArmature* armature = dragonBones::DBArmature::create("Ubbie"); this->addChild(armature); //armature->setScale(0.5); armature->setPosition( winSize/ 2); armature->getAnimation()->gotoAndPlay("turn face"); }
顯示效果如下:
二、核心接口介紹:
// 骨骼創建方法 /***********Create Armature Begin************/ static DBArmature* createWithFileName(const std::string &dragonBoneFileName,const std::string &textureFilename,const std::string &dragonBoneName); static DBArmature* createWithFileName(const std::string &dragonBonesFileName,const std::string &textureFilename,const std::string &dragonBonesName,const std::string &texture); static DBArmature* create(const std::string &dragonBonesName); static DBArmature* create(const std::string &dragonBonesName,const std::string &texture); /***********Create Armature End************/ /*************************** * 骨骼和圖片紋理加載 * 骨骼支持xml和xmlb(二進制格式)兩種格式 * 圖片紋理支持xml和plist ***************************/ /***********Load Func Begin************/ virtual DragonBonesData* loadDragonBonesData(const std::string &dragonBonesFile, const std::string &name = ""); virtual ITextureAtlas* loadTextureAtlas(const std::string &textureAtlasFile, const std::string &name = ""); /***********Load Func End************/ void removeUnusedDragonBonesData() ; //移除緩存文件 void setEventCallback(const std::function<void(const DBEventData*)>& callback) ; //骨骼事件回調
其他
由於手游對運行效率的要求,xml文件的解析成了游戲運行的瓶頸之一,為了解決這個問題,在dragonbones工程的tools目錄下我提供了一個xml轉換xmlb文件的工具。xmlb文件為xml的二進制文件和csb文件結構類似。有興趣的同學可以參看如何提高Dragonbones骨骼文件的讀取速度----Dragonbones4.5版本骨骼文件的二進制解析方案。
如何使用呢?
USAGE:python xml2xmlb.py [path/xxx.xml] [outpath:option]
[path/xxx.xml] : 輸入骨骼文件所在的路徑或骨骼文件
[outpath:option] : 輸出文件所在路徑 (可選擇參數,默認當前路徑)
注:工具支持Mac和Win32兩個平台
骨骼動畫編輯器
目前dragonbones 官方提供的官方的圖形化編輯器Dragonbones pro,顯示簡明,操作簡單易學。
注:
目前Dragonbones 官方的4.5版本加入了網格動畫Mesh和反向動力學動畫 目前我提供的版本僅支持到網格動畫,反向動力學動畫還在移植中。
擴展閱讀:
1、如何提高Dragonbones骨骼文件的讀取速度----Dragonbones4.5版本骨骼文件的二進制解析方案http://www.cnblogs.com/relvin/p/5546357.html
2、如何將cocos、spine等骨骼文件轉換成dragonbones的骨骼文件http://www.cnblogs.com/relvin/p/5543848.html
謝謝各位閱讀。
如在使用過程中有任何疑問可以直接在下面留言或發送到我個人郵箱relvin@qq.com。