on(cc.Node.EventType.TOUCH_START, (touch: cc.Event.EventTouch) => {
let target = touch.getCurrentTarget();
let locationInNode = target.convertToNodeSpaceAR(touch.getLocation());
// 问题: ↑ 输出的结果还是touch.getLocation() 并没有进行转换,预览时没问题,发布后就转换不了了
断点排查 发现使用的是 _worldMatrix 属性进行转换的
CCNode.js
convertToNodeSpaceAR: function convertToNodeSpaceAR(worldPoint, out) {
this._updateWorldMatrix();
_valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix);
if (worldPoint instanceof cc.Vec2) {
out = out || new cc.Vec2();
return _valueTypes.Vec2.transformMat4(out, worldPoint, _mat4_temp);
} else {
out = out || new cc.Vec3();
return _valueTypes.Vec3.transformMat4(out, worldPoint, _mat4_temp);
}
},
预览时的_worldMatrix [\n1, 0, 0, 0,\n0, 1, 0, 0,\n0, 0, 1, 0,\n568, 320, 0, 1\n]
发布后的_worldMatrix [\n1, 0, 0, 0,\n0, 1, 0, 0,\n0, 0, 1, 0,\n0, 0, 0, 1\n]
问题出现在以上标红的下标 , 实际对应的应该是相对世界坐标的位置,所以这块 转换不出来
挨个节点往上查发现都是0,那问题就和场景有关系了
最后我新建项目和当前项目对比,发现当前项目场景文件的第一个_active不知道什么时候被设置为false了