以下使用spine的时候,spine动画是使用studio导出的,在studio中导出格式设置为JSON,导出目录任选,勾选Create Atlas,点击导出 ,然后把它放在了我的工程里面进行的操作
为了不用在每次使用spine的时候都写一堆的重复代码,我把它的写在了公用的方法里面,方便调用
直接上代码
-- 创建动画 参数1:.json文件路径 参数2:.atlas文件路径 参数3:父节点 参数4:位置 参数5:缩放
function Actions.createSpine(fileJosn,fileAtlas,parent,pos,_scale)
-- print("-----Actions.createSpine-------")
local onegift_spine = Actions.createSketelon(fileJosn,fileAtlas) -- 传两个参数动画名称默认为1
Actions.play(onegift_spine,"1",true) -- 第四个参数不传默认为从0帧开始
parent:addChild(onegift_spine)
onegift_spine:setPosition(pos)
onegift_spine:setScale(_scale)
end
-- 播放动画 参数1:动画对象 参数2:动画名称 参数3:是否循坏 参数4:从第几帧开始播放
function Actions.play(_obj,name,loop,trackIndex)
-- print("-----Actions.play-------")
loop = loop or false
trackIndex = trackIndex or 0
_obj:setAnimation(trackIndex,name,loop)
_obj:update(0.01)--why: 如果不主动更新一下,spine动画需要等到下一帧才能看到,出现黑屏现象--
end
-- 创建spine动画 参数1:.json文件路径 参数2:.atlas文件路径 参数3:动画名称
function Actions.createSketelon(pathJson,pathAtlas,timeScale)
-- print("-----Actions.createSketelon-------")
local full_path=cc.FileUtils:getInstance():fullPathForFilename(pathJson)--spine找不到json文件报错--
if not full_path or full_path=="" then return end
-- 创建spine动画
local spine_animation = sp.SkeletonAnimation:create(full_path,pathAtlas,timeScale or 1) -- 第三个为动画名称
local spineTable = {}
Actions.LoadAni(spine_animation,spineTable)
return spine_animation
end
-- 加载动画
function Actions.LoadAni(src_table,target_table)
-- print("-----Actions.LoadAni-------")
if src_table == nil then return nil end
target_table = target_table and target_table or {}
for key,value in pairs(target_table) do
if type(value)~="table" or key=="__index" then
src_table[key]=value
else
src_table[key]=Actions.LoadAni({},value)
end
end
return src_table
end