节点坐标转换为世界坐标有问题

精灵所在初始位置为(0,0),即世界坐标为(667,375),如下

,然后在移动过程中我发现精灵的节点坐标和世界坐标不同步,
下边两个变量,第一个是节点坐标,第二个是转换的世界坐标。

按理说X减小了5,世界坐标也应该减5,但是却减少了大概10
Y减小了26,世界坐标却减小了大概52

不知道为什么会出现这种位置变化被翻倍的情况。

这是在update函数里写的代码:
cc.log(this.node.getPosition()) let wPos = this.node.convertToWorldSpaceAR(this.node.getPosition()); cc.log(wPos)
cocoscreator版本2.0.10,哪位大神可以解释下,不胜感激

1赞

锚点问题?

scale?

…这难道不是写法的问题么?
let wPos = this.node.convertToWorldSpaceAR ( cc.v2 ( 0, 0 ) )
or
let wPos = this.node.parent.convertToWorldSpaceAR ( this.node.getPosition() )

1赞

这个是正解.
写法错误.
node.convertToWorldSpaceAR §; 参数应当传入node 节点下的相对坐标.而不是node在parent中的坐标.

世界坐标转局部坐标:node.convertToNodeSpaceAR(worldPos);
局部坐标转世界坐标:node.convertToWorldSpaceAR(cc.p(0, 0));

1赞

看API的意思,这个不是nodePoint,即节点坐标吗?

那我先试试cc.p(0,0)吧,谢谢各位的意见

刚验证了,你这种方法是对的,但是不太理解为什么是这样用的?能给解释下嘛

你这么去写也是可以的
let wPos = this.node.parent.convertToWorldSpaceAR(this.node.getPosition());

再配合文档,是不是就能理解自己为什么错了?

你发的那张官方API的截图解释已经很清楚了… 将节点所在坐标系下的一个点转换到世界空间坐标系
假设父子节点关系 A -> B

A在canvas节点下
B在A节点下

你想要获得B节点的世界坐标
那就是把B节点所在的位置 即B节点坐标系的原点 ( 0, 0 ) 转换成世界坐标
或者
把A节点坐标系的B节点坐标转换成世界坐标

B的坐标是相对于A而言的 A无论怎么移动 B的坐标点都不会产生变化 但是B的世界坐标实际上是变化的
这里可以得出 你用B节点.convertToWorldSpaceAR ( B节点坐标 ) 是明显错误的

你使用的getPosition()获取的是相对父节点下的坐标,即该坐标对应的节点坐标系属于node.parent,所以就得用this.node.parent.convertToWorldSpaceAR(this.node.getPosition());
当你使用了node.convertToWorldSpaceAR(nodePoint),这时候的nodePoint的坐标对应的坐标系所属于node,自然就是cc.v2(0,0);
ps:改正下我上面的回复cc.p()替换成cc.v2();

谢谢,解释的很详细

顺便问一下,怎么把世界坐标,转换为屏幕坐标?