ocos2d-x 3.0坐标系详解--透彻篇 ---- convertToWorldSpace:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。

convertToWorldSpace:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。
重点说明:基于...   不一定要是真实的,  convertToWorldSpace 的结果也只是一个新的位置, 这个位置一般都没有什么实际意义的,大部分都是用在碰撞检测 ,一个虚拟的新位置(主要用在子弹和敌人不在同一层的情况,把子弹和敌人转换到同一节点下的本地坐标系进行位置比较,方便进行碰撞检测)

为什么官方文档,在这个文档描叙的时候,写的是基于当前节点下的坐标系....   中文还是值得深入的推敲的。  不是必须是。    只是如果不是当前节点的子节点,用这个方法算出来的新节点,没有什么实际意义。


http://www.cocos.com/docs/native/v3/coordinate-system/zh.html
--- 这篇文章看了 10来篇,比以前的老版本清晰老不少,但是还有几个没有将透彻的地方,多推敲一下,就会有疑问的地方

1  this->addChild(sprite1);  //此时添加到的是世界坐标系,也就是OpenGL坐标系  ---这个描述很关键
2 
3  this->addChild(sprite2); //此时添加到的是世界坐标系,也就是OpenGL坐标系
4  // 把世界坐标转换到当前节点的本地坐标系中
5  Point convertToNodeSpace(const Point& worldPoint) const;
6 
7  // 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
8   Point convertToWorldSpace(const Point& nodePoint) const;

现在的推敲点在于  convertToWorldSpace 方法的参数描叙:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。 但是实际的例子他们又不是父子关系。  
所以在理解: Point point2 = sprite1->convertToWorldSpace(sprite2->getPosition());  这句话的意识的时候,sprite2->getPosition() 实际获取的是父节点的本地坐标(父节点也是顶节点,所以也是世界坐标)。

官方文档给的解释:让人很疑惑


convert2

其中:Point point1 = sprite1->convertToNodeSpace(sprite2->getPosition());

相当于sprite2这个节点添加到(实际没有添加,只是这样理解)sprite1这个节点上,那么就需要使用sprite1这个节点的节点坐标系统,这个节点的节点坐标系统的原点在(20,40),而sprite1的坐标是(-5,-20),那么经过变换之后,sprite1的坐标就是(-25,-60)。

其中:Point point2 = sprite1->convertToWorldSpace(sprite2->getPosition());

此时的变换是将sprite2的坐标转换到sprite1的世界坐标系下,而其中世界坐标系是没有变化的,始终都是和OpenGL等同,只不过sprite2在变换的时候将sprite1作为了”参照“而已。所以变换之后sprite2的坐标为:(15,20)。

convert3




我的解释理解,让我自己豁然开朗: 
其中:Point point2 = sprite1->convertToWorldSpace(sprite2->getPosition());
相当于sprite2这个节点添加到(实际没有添加,只是这样理解)sprite1这个节点上(-5,-20),就是新虚拟节点node2_(-5,-20)这个新位置是 sprite1 本地坐标系下的相对位置  ,所以 node2_ 在世界坐标的位置就是:(20-5,40-20)=(15,20)。 这样理解起来,非常直观明了。---和参数说明也对应起来了。



解释的比较好的文章:
https://www.tuicool.com/articles/6ZBJZz


原文地址:https://www.cnblogs.com/porter/p/9552972.html