spine 骨骼中的API worldToLocal 不可用

  • Creator 版本: <3.8.6>

  • 目标平台: <网页版>

  • 重现方式:
    let bonePos = bone.worldToLocal(new sp.spine.Vector2(10,20));
    console.log(“bonePos====”,bonePos); //输出为undefined

  • 没有任何报错,调试进入spine.wasm.js中后代码看不出为啥没有返回。

  • 编辑器操作系统:windows,chorme浏览器

  • 重现概率: 我这里是必现的

骨骼是通过这样的方式获取的
let skeleton = node.getComponent(sp.Skeleton)

let runTimeSkeleton = skeleton._skeleton;

let bone = runTimeSkeleton.findBone(boneName);

这问题很久了,不晓得怎么吐槽 :rofl:

我没搜到有问这个问题的啊。。。

我是说这个缺陷,我不晓得有没有人问,之前在3.7.4的时候就发现了;你这最好自己重新封装一下这个接口,注意bone和bone之间可能还有父子关系,位置变换的时候要关注下;worldToLocal和localToWorld应该都不可用;

嗯,参考C++重新写了一下接口,可以用了。。。

public convertWorldToBoneLocal(bone: any, worldX: number, worldY: number) {

    const x = worldX - bone.worldX;

    const y = worldY - bone.worldY;



    const a = bone.a, b = bone.b, c = bone.c, d = bone.d;

    const invDet = 1 / (a * d - b * c);

    const localX = (x * d * invDet - y * b * invDet);

    const localY = (y * a * invDet - x * c * invDet);



    return { x: localX, y: localY };

}

public localToWorld(bone: any, localX: number, localY: number) {

    const worldX = localX * bone.a + localY * bone.b + bone.worldX;

    const worldY = localX * bone.c + localY * bone.d + bone.worldY;

    return { worldX, worldY };

}

看源码似乎是接口实现和接口导出不一致(spine-type-export里没有写return)…… 试试看
let bonePos = new sp.spine.Vector2(10,20);
bone.worldToLocal(bonePos);

你说对了,改的是引用。。。 文档接口写的是返回