zoukankan      html  css  js  c++  java
  • Cocos Creator Spine动画产生位移时,动画位置获取问题 (root的使用)

    版本:2.3.4

    参考:

    CSDN Unity-Spine动画位移问题

    CNBolg 使用Spine动画制作动作游戏

    网上搜了一下Spine动画位置的解决方案,参考了两篇文章吧。在制作spine动作时,不可避免的动画会产生位置,动画师不能一直将动画固定在原地。

    比如跑步动画,这个可以原地踏步,动画做在原地就行了。

    但是做出攻击,或者一些炫酷动作时,难免会产生位移。这个位移可能是曲线的,非线性运动,直接让程序或者策划去微调出和动画师制作的一样效果有些困难。

    例如如下攻击动画。人物位置移动了,但是动画位置还在原地呢。这样做碰撞检测或者其他位置相关判断的时候,还在检测原地的位置,这显然是不合适的。

    这个解决方案就是让动画师制作动画时,让根骨骼root跟随动画一起移动。

    下图root根骨骼就是人物脚下那个十字图标

    在cocos中获取root的位置。在做位置相关判断时,加上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("动画位置:",sk.node.x + rootX, sk.node.y + rootY);
        }
    

      

    如果要在人物身上挂载碰撞BoxCollider,选择骨骼动画,点击生成挂点。

    生成挂点,会显示人物的骨骼树

    我们在root下挂上一个BoxCollider做碰撞检测

    在代码里显示碰撞检测debugDraw

        onLoad(){
            var manager = cc.director.getCollisionManager();
            manager.enabled = true;
            manager.enabledDebugDraw = true;
        }
    

    运行游戏,可以看到碰撞检测的BoxCollider挂载root上后,是和人物显示的位置是一致的。

    这样做使用BoxCollider做碰撞检测,就不用担心spine动画里有位移了。

  • 相关阅读:
    冲刺第九天
    冲刺第八天
    寻找小水王
    冲刺第七天
    冲刺第六天
    冲刺第五天
    寻找水王程序二
    学习进度条(第十二周)
    寻找水王程序一
    学习进度条(第十一周)
  • 原文地址:https://www.cnblogs.com/gamedaybyday/p/13062293.html
Copyright © 2011-2022 走看看