需求:
(1)希望在骨骼上繫結乙個粒子特效
(2)獲取骨骼的位置
(3)獲取骨骼動畫的大小
(4)lua
1. cocostudio動畫編輯器
(1)繫結粒子特效(跟隨骨骼的移動移動)
local bonenew = ccs.bone:create("particle")bonenew:adddisplay(particle, )
--設定是否跟隨骨骼一起移動
bonenew:setignoremovementbonedata(true)
--顯示骨骼上繫結的內容(這裡是粒子特效,換裝也是同樣的介面)
bonenew:changedisplaywithindex(, true)
--設定層級關係
bonenew:setlocalzorder()
--layer22為骨骼動畫中想繫結的骨骼,設定為該骨骼為粒子特效所在骨骼的父骨骼
armature:addbone(bonenew, "layer22")
* 其他的和骨骼的繫結也是通過此方式實現,感覺比較好用
(2)獲取骨骼位置
修改源**,從getworldinfo中獲取資料,在bone類中加乙個介面
cocos2d::vec2 bone::getboneposition() const使用tolua++匯出來之後如下(當然,自己也可以寫乙個,就不用匯出來這個步驟了):
int lua_cocos2dx_studio_bone_getboneposition(lua_state* tolua_s)#endif
argc = lua_gettop(tolua_s)-;
)cclog();
;#if cocos2d_debug >= 1
tolua_lerror:
tolua_error(tolua_s,"#ferror in function 'lua_cocos2dx_studio_bone_getboneposition'.",&tolua_err);
#endif;}
(3)獲取骨骼動畫大小
cocostudio匯出來載入後的armature本身就是乙個node,直接getcontentsize就可以了。但是spine的動畫就不行,getcontentsize的結果為0,要使用別的介面,看下面。
2. spine動畫編輯器
(1)繫結粒子特效(跟隨骨骼的移動移動)
沒有辦法做到,但是可以通過獲取骨骼的位置之後,新增乙個特效到整個骨骼動畫的這個位置上,不過是不能跟隨骨骼一起移動的,一起移動看到有兩種方法,不過都沒有試過,就先記錄在這裡,想用再來試一下
* update函式每幀獲取骨骼的位置,把粒子特效重現設定位置
參考:[1]
* 重寫spine骨骼的的介面,每個骨骼和乙個node對應
參考:[2]
(2)獲取骨骼位置
同studio(因為lua沒有匯出函式介面),修改**,匯出lua,在類中增加乙個函式:
vec2 skeleton::getboneposition(const char* bonename) const匯出後的c++**如下,同樣的可以自己寫:
int lua_cocos2dx_spine_skeleton_getboneposition(lua_state* tolua_s)#endif
argc = lua_gettop(tolua_s)-;
)cclog();
;#if cocos2d_debug >= 1
tolua_lerror:
tolua_error(tolua_s,"#ferror in function 'lua_cocos2dx_spine_skeleton_getboneposition'.",&tolua_err);
#endif;}
(3)獲取骨骼動畫大小
這個比較重要!!不能使用介面getcontentsize,得出來的是0,但是skeleton類提供了另外乙個介面,也匯出了lua介面:
rect skeleton::getboundingbox () constvec2 position = getposition();
return rect(position.x + minx, position.y + miny, maxx - minx, maxy - miny);
}說明:
* 返回四個值:x, y, height, width
* 說明:(x, y)左下角的座標,相對於rootbone的原點;height, width就是整個骨骼動畫的大小
* rootbone可以理解為cocos裡面的錨點
* 【重要】在呼叫該介面之前,需要呼叫update介面初始化一遍資料,不然也是沒有資料的,參考[3]
3. 總結
(1)獲取位置都是需要新加介面的
(2)雖然spine編輯器要好用,但是對於程式來說spine繫結特效還沒有cocostudio方便
(3)cocostudio的位置最好不要直接拿來用,例如轉換為全域性座標,最好直接addbone的方式
(4)spine的座標也是直接骨骼動畫addchild
4. 參考
[1][2]
[3]
cocos2d x 骨骼動畫初步了解
上乙個專案用的是cocos2d x2.0.4的模板,並沒有很好的支援骨骼動畫,用的只是別人寫的骨骼外掛程式,但是並不是很好的與cococs2d匹配。現在終於可以看到有原配了 新增資源 ccarmaturedatamanager sharedarmaturedatamanager addarmatur...
cocos2dx動畫Animation介紹
一 幀動畫 cpp ccanimation animation ccanimation create 從本地檔案 系統中載入檔案到ccspriteframe中區,然後新增到ccanimation中 for int i 1 i 15 i sprintf szimagefilename,images g...
cocos2dx動畫Animation介紹
一 幀動畫 你可以通過一系列檔案,像如下這樣,建立乙個動畫 01ccanimation animation ccanimation create 02 從本地檔案系統中載入檔案到ccspriteframe中區,然後新增到ccanimation中 03for inti 1 i 15 i 04 06sp...