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

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

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


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

node

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() 实际获取的是父节点的本地坐标(父节点也是顶节点,因此也是世界坐标)。

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


ui

convert2

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

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

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

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

convert3




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


blog


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


文档

相关文章
相关标签/搜索