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
其中: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
个人解释理解,让我本身豁然开朗:
其中: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
文档