Cocos Creator Spine动画产生位移时,动画位置获取问题 (root的使用)
版本:2.3.4
參考:
CSDN?Unity-Spine動(dòng)畫位移問題
CNBolg?使用Spine動(dòng)畫制作動(dòng)作游戲
?
網(wǎng)上搜了一下Spine動(dòng)畫位置的解決方案,參考了兩篇文章吧。在制作spine動(dòng)作時(shí),不可避免的動(dòng)畫會(huì)產(chǎn)生位置,動(dòng)畫師不能一直將動(dòng)畫固定在原地。
比如跑步動(dòng)畫,這個(gè)可以原地踏步,動(dòng)畫做在原地就行了。
?
但是做出攻擊,或者一些炫酷動(dòng)作時(shí),難免會(huì)產(chǎn)生位移。這個(gè)位移可能是曲線的,非線性運(yùn)動(dòng),直接讓程序或者策劃去微調(diào)出和動(dòng)畫師制作的一樣效果有些困難。
例如如下攻擊動(dòng)畫。人物位置移動(dòng)了,但是動(dòng)畫位置還在原地呢。這樣做碰撞檢測(cè)或者其他位置相關(guān)判斷的時(shí)候,還在檢測(cè)原地的位置,這顯然是不合適的。
?
?
這個(gè)解決方案就是讓動(dòng)畫師制作動(dòng)畫時(shí),讓根骨骼root跟隨動(dòng)畫一起移動(dòng)。
下圖root根骨骼就是人物腳下那個(gè)十字圖標(biāo)
?
在cocos中獲取root的位置。在做位置相關(guān)判斷時(shí),加上root的位置就行了。
start() {let sk:sp.Skeleton = this.hero.getComponent(sp.Skeleton);sk.setAnimation(0,"attack1_1",true);let root = sk.findBone("root");let rootX = root.x;let rootY = root.y;console.log("root位置:",rootX , rootY);console.log("動(dòng)畫位置:",sk.node.x + rootX, sk.node.y + rootY);}
如果要在人物身上掛載碰撞BoxCollider,選擇骨骼動(dòng)畫,點(diǎn)擊生成掛點(diǎn)。
?
?
生成掛點(diǎn),會(huì)顯示人物的骨骼樹
?
?
我們?cè)趓oot下掛上一個(gè)BoxCollider做碰撞檢測(cè)
?
?
在代碼里顯示碰撞檢測(cè)debugDraw
onLoad(){var manager = cc.director.getCollisionManager();manager.enabled = true;manager.enabledDebugDraw = true;}?
運(yùn)行游戲,可以看到碰撞檢測(cè)的BoxCollider掛載root上后,是和人物顯示的位置是一致的。
這樣做使用BoxCollider做碰撞檢測(cè),就不用擔(dān)心spine動(dòng)畫里有位移了。
?
總結(jié)
以上是生活随笔為你收集整理的Cocos Creator Spine动画产生位移时,动画位置获取问题 (root的使用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spyder for python3.6
- 下一篇: 全系列Android源代码在线浏览网站