版本: cocoscreator 2.0.7
环境: chrome
描述: 在触摸事件回调中使用convertToNodeSpaceAR,如果Camera.zoomRatio发生改变,convertToNodeSpaceAR返回结果没有发生变化.
实例代码:
// Camera.zoomRatio改变后输出没有变化
onTouch(event: cc.Event.EventTouch) {
if (event.getType() === cc.Node.EventType.TOUCH_END) {
let pos: cc.Vec2 = this.node.convertToNodeSpaceAR(event.getLocation());
cc.log(${pos.x} {pos.y});
}
}
看了看CCNode.js和CCCamera.js的代码CCNode.convertToNodeSpaceAR这个接口只是获取worldMatrix没有考虑camera缩放,移动后的影响,如果要做摄像机移动操作,感觉还是要用移动节点的方法啊,如此一来摄像机的价值就不大了
不是bug,Camera你可以理解为就是一个渲染的入口,并不涉及到游戏逻辑,因此也更不会影响游戏世界中的坐标或是Canvas的大小,它只是一个观察者的角色
就好像如果一个桌面上面有一瓶水,离的近看,桌子在我的视野里面就大,离得远就小,但这不会影响瓶子在桌子这个坐标系下面的位置
如果你要获得某个坐标或是节点在Camera下的坐标是多少,可以参考使用下面的api
测试了Camera.getCameraToWorldPoint接口,大约理解了你的意思,具体来说就是event.getLocation()接口总是返回opengl屏幕坐标系下的位置,没有经过Camera转换
用的1.93引擎,想把世界坐标转到camera局部坐标,发现转不了,我数学又不太好,1.93没有getWorldToCameraPoint方法,怎么解决咧。。
