文档中的接口适用于3.7.x最新版本和4.x最新版本。
Quick-Cocos2dx-Community 3.7.3 更新 Spine runtime,支持 Spine 3.6 版本导出的数据格式。由于 Spine runtime 各版本之间不兼容,请切换Spine设置到对应的版本使用。
Spine 3.6 新增二进制导出格式,对应的Spine动画创建接口也有变动。Lua接口改为3种使用方式:
直接从json创建。
local spineSP = sp.SkeletonAnimation:createWithJsonFile(
"tank/tank-pro.json", "tank/tank-pma.atlas")
spineSP:pos(display.width / 2, display.height / 2):addTo(self)
spineSP:setAnimation(0, "drive", true)
从二进制创建
local spineSP = sp.SkeletonAnimation:createWithBinaryFile(
"tank/tank-pro.skel", "tank/tank-pma.atlas")
spineSP:pos(display.width / 2, display.height / 2):addTo(self)
spineSP:setAnimation(0, "drive", true)
Spine 3.6 runtime新增接口,用于优化json缓慢的加载,提升性能。
从sp.SkeletonData创建
-- 创建缓存,全局变量以便于不被释放
cachedData = sp.SkeletonData:create("tank/tank-pro.json", "tank/tank.atlas")
local spineSP = sp.SkeletonAnimation:createWithData(cachedData)
spineSP:pos(display.width / 2, display.height / 2):addTo(self)
spineSP:setAnimation(0, "drive", true)
-- 测试从一个 sp.SkeletonData 多次创建
self:performWithDelay(function()
local spineSP = sp.SkeletonAnimation:createWithData(cachedData)
spineSP:pos(display.width / 2, 100):addTo(self)
spineSP:setAnimation(0, "drive", true)
end, 1)
sp.spSkeletonData 在 Quick-Cocos2dx-Community 3.6 Beta1 及以后版本可用。sp.spSkeletonData 是手动封装的Lua,基于Lua本身的内存管理机制。 通过以上方法创建的骨骼动画,不接管 cachedData 的生命周期,spineAnimation 可以自由销毁,然后再使用 cachedData 来创建新的骨骼动画。我们可以把 cachedData 缓存起来以达到优化性能的目的。
Spine 3.6 runtime 新增了 ANIMATION_INTERRUPT 和 ANIMATION_DISPOSE 两种事件类型,总共6种事件类型:
sp.EventType =
{
ANIMATION_START = 0,
ANIMATION_INTERRUPT = 1,
ANIMATION_END = 2,
ANIMATION_COMPLETE = 3,
ANIMATION_DISPOSE = 4,
ANIMATION_EVENT = 5,
}
老项目移植,需要更新项目下的 cocos/spine/SpineConstants.lua 文件。
注册事件用法如下:
spineSP:registerSpineEventHandler(function(event)
dump(event)
end, sp.EventType.ANIMATION_COMPLETE)
建议在 setAnimation 之前注册,以便正确收到所需事件。