2.4.2 世界坐标转换问题
同一个节点坐标转换世界坐标,直接用浏览器预览和webMobile打包之后预览的结果不一样,2.3.1的结果是一样的
var build = this.node.getChildByName(“TiledMap”).getChildByName(“builds”).getChildByName(“build”)
console.log(“build坐标转换”,this.node.convertToWorldSpaceAR(build.position))
希望工作人员请回复一下,谢谢
this.node.getChildByName(“TiledMap”).getChildByName(“builds”).convertToWorldSpaceAR(build.position))
楼上正解,或者build.convertToWorldSpaceAR(cc.v2(0,0));
谢谢回复,不过我试了一下你这个和楼下的方法还是不对,我这次用的是2.4.0版本,我也用过2.3.4测过
这是我的代码
properties: {
bg : cc.Node,
spr : cc.Node
},
// LIFE-CYCLE CALLBACKS:
// onLoad () {},
start () {
console.log("转换位置前",this.spr.position)
var pos = this.spr.convertToWorldSpaceAR(cc.v2(0,0))
var pos1 = this.bg.convertToWorldSpaceAR(this.spr.position)
console.log("转换位置",pos,pos1)
},
层级结构如下

,想了解一下是坐标转换根据什么原理转换的
var pos = this.spr.convertToWorldSpaceAR(cc.v2(0,0)) 这是正确操作 ,而var pos1 = this.bg.convertToWorldSpaceAR(this.bg.position)这样是将 bg节点上的 this.bg.getPosition坐标转换到世界坐标,而我们常常需要的就是this.bg的中点cc.v2(0,0)转换到世界坐标
而且你怎么在this。bg上用了this.spr的坐标
怎么实现的话,这就要看底层代码了吧,我也没去看过,我猜想是一步步递归父节点,一个一个转化到上一层节点的坐标,最后是利用canvas下的摄像机,进而获得世界坐标
我说的不一样是浏览器直接预览和打包成webMobile时输出结果不一样,而 pos,pos1的值是一样的,
我看了CCNode.js文件没找到,不知道是自己找的不对还是什么原因
其实节点内部会保留"世界变换矩阵"。需要用到世界坐标时,直接拿本地坐标和世界变换矩阵相乘即可。
是不是用了 Widget 组件。
是的,用了,这个影响坐标转换吗
你再搞笑吗
我只是bg用了widget,spr没用。这个我觉得是不影响的
直接上传demo吧
浏览器预览和webMobile打包 这俩是同一个分辨率对吧。bg坐标调成0,0
之后吧widge组件取消下 看看吧

