如何将touch得到的坐标转换成节点坐标和世界坐标
touch事件得到的是世界坐标,要转换到节点坐标可以用:
node.convertToNodeSpaceAR(touchEvent.getLocation())
node就是你想转换到的目标节点
如果你想将一个节点坐标转换到世界坐标,可以用:
node.parent.convertToWorldSpaceAR(node.position);
这里是将node的节点的位置转换为世界坐标,节点的position是它在父节点中的坐标,因此要用node.parent节点来做转换。
如果要将一个nodeA节点下的child_a节点坐标转换到nodeB节点下, 需要先将child_a转换成世界坐标,然后再用nodeB.convertToWorldSpaceAR转换。
谢谢啦
我的相机是运动的,不在原点,试了convertToNodeSpaceAR(),convertToNodeSpace(),convertTouchToNodeSpaceAR(),convertToNodeSpace(),都没得到正确的坐标,cam.getCameraToWorldPoint();这个方法我按照文档给了两个参数,但是报错
我需要得到触摸点在世界坐标系下的坐标,正确的做法是什么
相机在原点时得到的坐标都是正确的,但是相机动起来时,得到的坐标却还是相机在原点时的坐标
解决了,是最后一个方法let temp=this.cam.getCameraToWorldPoint(touches[0].getLocation(),—),我有语法错误编辑器没报错,刚改了坐标就正确了,它这个方法第二个参数文档里写的是用来接收结果,但是方法本身也返回一个结果,第二个参数我试了随便给个vec2都正确
节点坐标转化成屏幕坐标也是这个么camera.getWorldToCameraPoint(point, out);这样子对么
2.1.2 版 touch事件得到的是 屏幕坐标 不是世界坐标
2.4.4版本:
这样进行转换
onClickBtn(event: cc.Event.EventTouch, localParentNode: cc.Node) {
let screenPoint: cc.Vec2 = event.getLocation();//屏幕坐标
let worldPoint = cc.Camera.main.getScreenToWorldPoint(screenPoint);//世界坐标
let localPoint = localParentNode.convertToNodeSpaceAR(worldPoint);//本地坐标
}
这是为啥啊??确实这样才可以
挺好理解的:
let screenPoint: cc.Vec2 = event.getLocation();//屏幕坐标
按钮的触摸回调给的坐标是屏幕坐标
let worldPoint = cc.Camera.main.getScreenToWorldPoint(screenPoint);//世界坐标
摄像机负责把世界坐标的物体渲染到屏幕上,所以利用摄像机把屏幕坐标还原到世界坐标
let localPoint = localParentNode.convertToNodeSpaceAR(worldPoint);//本地坐标
局部坐标是节点树一层层的父节点坐标加起来来获得世界坐标,所以提供父节点和世界坐标来反向算出局部坐标
感谢大佬. 怪不得我最近做拖动,用鼠标就正常.用手指就不对.物体和手指始终有一段距离,
看了这个用了 cc.Camera.main.getScreenToWorldPoint就正常
推荐一本书,虽然不是说cocos引擎的,但是很通俗易懂,《unity shader入门精要》
mark~