quick 3.3載入Spine問題,quick3.3載入spine

來源:互聯網
上載者:User

quick 3.3載入Spine問題,quick3.3載入spine

最近項目要升級到Quick 3.3, 並且使用了Spine作為動畫編輯器, 在此把升級過程中,有關quick 3.3 載入Spine遇到的坑在此記錄一下。

1、Spine版本問題
首先Quick 3.3整合的版本並非是官方最新版本, 於是這就有可能會遇到一些比較奇怪的問題, 所以在這裡建議最好使用Spine在github(https://github.com/EsotericSoftware/spine-runtimes)
上使用最新版本,版本的替換也是相當容易。

先下載Spine-runtimes,拷貝如下檔案夾下的檔案。
【1】spine-c/src/spine 下所有檔案
【2】spine-c/include/spine下所有檔案
【3】spine-cocos2dx/3/src/spine 下所有檔案
將quick 3.3官方下的所有spine下的檔案覆蓋
此時,用VS重編項目,這樣, 在C++版本下,就可以使用最新版的Spine功能了

2、匯出Spine功能到Lua指令碼
上面說的是在C++版本下使用Spine, 但是我們用的quick架構,需要用到Lua代碼,這裡就要講一下Spine的tolua問題了。

首先,請參考一下這篇文章:http://blog.k-res.net/archives/1750.html
以及書籍《我所理解的cocos2d-x》第18章也對Lua-bindinge 有所描述,在此不重複講。
開啟專案檔下 framework/cocos2d-x/tools/tolua下,可以看到一堆。*.ini檔案,這些都是需要匯出的Spine代碼函數,這裡重點關注一下【genbindings.py】、【README.mdown】
readme.mdown是協助檔案,裡面重點講到,使用Tolua工具在window平台, 需要安裝如下工具:
1、python2.7.3
2、安裝Python外掛程式:pyyaml
3、安裝Python外掛程式:pycheetah
4、安裝並設定android-ndk-r9b, 並設定NDK_ROOT路徑

安裝完了之後,雙擊genbindings.py就可以產生供Lua使用的Spine 代碼了。

3、注意事項
quick 3.3將一些Spine代碼重新命名了, 在framework/cocos2d-x/cocos/scripting/lua-binding/manual/spine
開啟lua_cocos2dx_spine_manual.cpp檔案,可以在裡面找到這麼一段代碼:
static void extendCCSkeletonAnimation(lua_State* L)
{
lua_pushstring(L, “sp.SkeletonAnimation”);
lua_rawget(L, LUA_REGISTRYINDEX);
if (lua_istable(L,-1))
{
tolua_function(L, “create”, lua_cocos2dx_CCSkeletonAnimation_createWithFile);
tolua_function(L, “registerSpineEventHandler”, tolua_Cocos2d_CCSkeletonAnimation_registerSpineEventHandler00);
tolua_function(L, “unregisterSpineEventHandler”, tolua_Cocos2d_CCSkeletonAnimation_unregisterSpineEventHandler00);
tolua_function(L, “setBlendFunc”, tolua_spine_SkeletoneAnimation_setBlendFunc);
tolua_function(L, “addAnimation”, lua_cocos2dx_spine_SkeletonAnimation_addAnimation);
tolua_function(L, “setAnimation”, lua_cocos2dx_spine_SkeletonAnimation_setAnimation);
}
lua_pop(L, 1);

Because sp.SkeletonAnimation:create creat a LuaSkeletonAnimation object,so we need use LuaSkeletonAnimation typename for g_luaType*/    std::string typeName = typeid(LuaSkeletonAnimation).name();    g_luaType[typeName] = "sp.SkeletonAnimation";    g_typeCast["SkeletonAnimation"] = "sp.SkeletonAnimation";}

關鍵看tolua_function,可以看到將createWithFile更換為create, 註冊指令碼事件為registerSpineEventHandler

4、關於回調
切記不要在事件回調中,刪除Spine節點對象, 因為刪除自身之後, 後續還會有其他動作。
我的做法是:在update中,設定一個是否可以刪除標記, 根據標記來判斷是否刪除spine節點對象,而事件響應回呼函數中, 則是設定標記的。

至於Lua中,使用update, 可以使用Schedule調度.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.