cocos converToWordSpace

来源:互联网 发布:mac qq发不了文件夹 编辑:程序博客网 时间:2024/04/29 08:40

每次遇到cocos的坐标转换,总是反应不过来,今天就顺便总结一下,只要这样记住就行了。

比如一个精灵Sprite,不管这个Sprite他的父节点是谁。你都不用去关心。
好,现在我们把Sprite转换为世界坐标:
1.我们可以通过Sprite自行转换

auto size=Sprite->getContentSize(); auto wordPos=Sprite->convertToWordSpace(Point(size.width/2,size.height/2));

以Sprite自身为一个节点,将他下面的点size.width/2,size.height/2转换为世界坐标,为什么是这个坐标,因为Sprite的默认锚点是0.5,0.5. 如果他的锚点是0.0,那么你因该这么写:

 auto wordPos=Sprite->convertToWordSpace(Point(size.width/2,size.height/2));
 2.不管你想怎么转换,我们是要告诉cocos我想将哪一个Node的哪一个pos转换为世界坐标就行了,他会自动帮你计算Node的最终父节点,然后帮你计算。所以我们还可以这样写:
 auto  wordPos=Sprite->getParent()->converToWordSpace(Sprite->getPosition());

将Sprite的父节点作为节点,然后去计算在Sprite的世界坐标。这个时候有一个好处,你就不用去担心Sprite的锚点问题了!

现在我们要将一个世界坐标转换为本地坐标,太简单了。但是要求你传入的参数一定是一个世界坐标
还是上面的例子,将Sprite转换为Node的本地坐标:

auto pos=Node.converToNodeSpace(Sprite->convertToWordSpace(Point(size.width/2,size.height/2)));

我们先要得到Sprite的世界坐标,我们才能将其转换为任意node的本地坐标。至于为什么要必须给世界坐标,这个当然很好理解的。cocos只有知道了世界坐标,他能正确的帮你转换为某个node的本地坐标。如果你直接给一个本地坐标,他就会把这个坐标当成世界坐标来帮你计算,那么明显不是你想要的结果。

0 0
原创粉丝点击