版本2.3.4
參考:
一 cocos2.3版本只支持spine3.8導出的二進制
官方版本說明:2.3更新說明

二 使用Spine動畫
將spine的二進制文件拖動到項目assets文件夾下

拖拽骨骼動畫(龍骨頭圖標)到舞台,即可生成骨骼動畫

代碼中播放 (raptor為骨骼動畫的節點)
let sk:sp.Skeleton = this.raptor.getComponent(sp.Skeleton);
//播放行走動畫
sk.setAnimation(0, "walk",true);
三 外部圖片進行局部換裝
比如要把槍替換掉

把槍替換成這個外部圖片

換裝代碼如下 (sp.SkeletonTexture會報錯,但是能正常運行)
大致是自己使用外部圖片來創建一個region,替換骨骼動畫的region。
start() {
// init logic
this.label.string = this.text;
let sk:sp.Skeleton = this.raptor.getComponent(sp.Skeleton);
//播放行走動畫
sk.setAnimation(0, "walk",true);
//換裝
this.changeSlot(sk, "gun", cc.loader.getRes("icon/t_job1.png"));
}
/**
* 用外部圖片局部換裝
* @param sk 骨骼動畫
* @param slotName 需要替換的插槽名稱
* @param texture 外部圖片
*/
public changeSlot(sk:sp.Skeleton, slotName:string, texture:cc.Texture2D) {
//獲取插槽
let slot = sk.findSlot(slotName);
//獲取掛件
let att = slot.attachment;
//創建region
let skeletonTexture = new sp.SkeletonTexture();
skeletonTexture.setRealTexture(texture)
let page = new sp.spine.TextureAtlasPage()
page.name = texture.name
page.uWrap = sp.spine.TextureWrap.ClampToEdge
page.vWrap = sp.spine.TextureWrap.ClampToEdge
page.texture = skeletonTexture
page.texture.setWraps(page.uWrap, page.vWrap)
page.width = texture.width
page.height = texture.height
let region = new sp.spine.TextureAtlasRegion()
region.page = page
region.width = texture.width
region.height = texture.height
region.originalWidth = texture.width
region.originalHeight = texture.height
region.rotate = false
region.u = 0
region.v = 0
region.u2 = 1
region.v2 = 1
region.texture = skeletonTexture
//替換region
att.region = region
att.setRegion(region)
att.updateOffset();
}
替換效果

四 兩個骨骼動畫之間替換掛件
通過更換部位的名字,找到骨骼動畫對應的Slot,然后將掛件Attachment進行替換。
let sk1:sp.Skeleton;
let sk2:sp.Skeleton;
let parts = ["left-arm", "left-hand", "left-shoulder"];
for (let i = 0; i < parts.length; i++) {
let slot1 = sk1.findSlot(parts[i]);
let slot2 = sk2.findSlot(parts[i]);
let attachment = slot2.getAttachment();
slot1.setAttachment(attachment);
}
五 全局換裝
