《LINUX實操:Cocos2D-X-3.4項目直升Cocos2D-X-3.6需要解決的問題》要點:
本文介紹了LINUX實操:Cocos2D-X-3.4項目直升Cocos2D-X-3.6需要解決的問題,希望對您有用。如果有疑問,可以聯系我們。
在Ubuntu上安裝Cocos2d-x 3.4環境失敗后,毅然決定投入3.6的懷抱,因為我在Ubuntu上已經勝利安裝好了3.6的開發環境.
現在要確認的是,以前用CocosStudio 1.6(夠老的吧?不過現在貌似有些公司還在用啊)做的UI工程和特效在3.6下是否會出問題,出的問題是否能順利辦理.這決定了我是否能在3.6的環境下開發.
準備用以前一個3.4版本下開發的單機游戲做測試.選這個項目的原因是:1. 項目比擬小,邏輯簡單,不容易出問題. 2. 項目代碼100%本人獨立完成,即使出問題,容易查找.
先將項目備份一下,改一個新的目錄名,然后開端在里面折騰.
回到Windows機器上,把運行環境先降級到Cocos 2d-x 3.6.辦法就是進入解壓后的cocos2d-x-3.6目錄下,運行:
python setup.py
然后重啟一次電腦,生產環境就釀成Cocos2d-x 3.6了.
用cocos new的命令創建一個新工程.我們只必要工程目錄下的cocos2d-x目錄.(其實就是完整的cocos2d-x-3.6目錄下的內容,去除掉template和test這兩個目錄).將原3.4工程目錄下的cocos2d-x目錄整個刪除,將新工程的這個目錄完整拷貝過去.
然后打開Vs2013開始調試,發現找不到資源文件,讀不到Resorces目錄下的內容.
跟蹤比擬3.4和3.6兩個項目下的區別.發現在FileUilt類下的_defaultRootPath,一個是Rersouce目錄,一個是proj.win32/Debug.win32目錄.
那么3.6是如何找到資源的呢?再跟蹤3.6的空項目,發現它便是在proj.win32/Debug.win32目錄下讀取的文件.
這闡明了一個問題:3.6版本在編譯的時候把資源拷貝到了這個目錄下.
打開proj.win32下的C++項目配置文件,后綴是.vcxproj那個,比較3.4和3.6下這個文件的區別,發現本來3.4項目少了后面一個xcopy資源的操作.下面是添加后的內容:
<PreLinkEvent>
<Command>
if not exist "$(OutDir)" mkdir "$(OutDir)"
xcopy /Y /Q "$(EngineRoot)external\websockets\prebuilt\win32\*.*" "$(OutDir)"
xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y
</Command>
</PreLinkEvent>
添加的是這行:xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y
這樣讀取資源的坑就辦理了.
回頭想一想,其實這不是Cocos的坑啊,人家已經在工程文件中拷貝了資源.好吧,是我自己挖的坑,但是只要是直接升級,而不是開新項目,難免就會碰到這個問題.反正我是被折騰了一兩個小時.
這個坑由來已久了,當年發現之后就跟cocosStudio的作者溝通過,他給出的建議是粒子特效中用到的png和plist不要同名即可.這樣的規范下,在Debug版本運行的時候,雖然會賡續報找不到文件的錯,但并不影響運行,程序也不會崩.至少在3.4以及3.4以下的版本下一直是可行的.
然則,3.6下崩了.
這個Bug,貌似CocosStudio退出江湖的時候都沒有辦理,還是讓我們自己動手吧.
找到CCDataReaderHelper.cpp這個文件,打開.
F3找到下面這個函數.
void DataReaderHelper::addDataFromBinaryCache(const char fileContent, DataInfo dataInfo)
然后找到這個函數最后的地位:
紅框的部門,修改為:
if (FileUtils::getInstance()->isFileExist(pngPath)) {
ArmatureDataManager::getInstance()->addSpriteFrameFromFile((dataInfo->baseFilePath + plistPath).c_str(), (dataInfo->baseFilePath + pngPath).c_str(), dataInfo->filename.c_str());
}
便是加個判斷條件,如果有plist,但是沒有同名的png,就不加入到SpriteFrame中.
看到這里,你應該明確這個坑爹的坑是怎么來的了吧:cocosStudio在讀粒子特效的plist時,把它當成了png + plist的圖集了.
這個坑也就填平了.再次運行項目,統統正常,打完收工.
我們的項目一直是用的csb二進制文件,沒有去讀json,所以json我就不管了.如果你的項目讀的是json文件,你必要修改DataReaderHelper::addDataFromJsonCache這個類里面的相同內容.
或者,用json的很簡單,因為你可以修改文本啊,打開特效/UI對應的JSON文件,將加在最后那個粒子特效plist那行刪除失落就行了.
--------------------------------------朋分線 --------------------------------------
Ubuntu 下設置裝備擺設/編譯/運行 Cocos2dx項目?
新里程碑:Cocos2d-x v3.0 正式版本宣布!
Cocos2d基礎及根本函數
Cocos2d 若何做 Android 適配
剖析Cocos2d-x之Action實現
Ubuntu下Cocos2d-x開發情況搭建及配置
--------------------------------------朋分線 --------------------------------------
Cocos2D-X 的詳細先容:請點這里
Cocos2D-X 的下載地址:請點這里
本文永遠更新鏈接地址:
學習更多LINUX教程,請查看站內專欄,如果有LINUX疑問,可以加QQ交流《LINUX實操:Cocos2D-X-3.4項目直升Cocos2D-X-3.6需要解決的問題》。