世界坐标转换

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 组件。

是的,用了,这个影响坐标转换吗

你再搞笑吗

https://docs.cocos.com/creator/manual/zh/components/widget.html?h=widget%20
你去看看widget组件

我只是bg用了widget,spr没用。这个我觉得是不影响的

直接上传demo吧

浏览器预览和webMobile打包 这俩是同一个分辨率对吧。bg坐标调成0,0
之后吧widge组件取消下 看看吧

HelloWorld.zip (1.6 MB)

第一张是浏览器预览,第二张是打包后的,版本2.4.2,浏览器谷歌