-
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);
这问题很久了,不晓得怎么吐槽 
我没搜到有问这个问题的啊。。。
我是说这个缺陷,我不晓得有没有人问,之前在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);
你说对了,改的是引用。。。 文档接口写的是返回