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

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

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

  this->addChild(sprite1);  //此时添加到的是世界坐标系,也就是OpenGL坐标系  ---这个描述很关键

  this->addChild(sprite2); //此时添加到的是世界坐标系,也就是OpenGL坐标系
// 把世界坐标转换到当前节点的本地坐标系中
Point convertToNodeSpace(const Point& worldPoint) const; // 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Point convertToWorldSpace(const Point& nodePoint) const;

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

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

其中: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)。

我的解释理解,让我自己豁然开朗: 
其中: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

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

  1. Cocos2d-x 3.0坐标系详解(转载)

    Cocos2d-x 3.0坐标系详解 Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系. 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenG ...

  2. (6)Cocos2d-x 3.0坐标系详解

    Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系. 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系. 屏幕坐标系和 ...

  3. ArcGIS中的北京54和西安80投影坐标系详解

    ArcGIS中的北京54和西安80投影坐标系详解 1.首先理解地理坐标系(Geographic coordinate system),Geographic coordinate system直译为地理 ...

  4. CGJ02、BD09、西安80、北京54、CGCS2000常用坐标系详解

    一.万能地图下载器中的常用坐标系 水经注万能地图下载器中的常用的坐标系主要包括WGS84经纬度投影.WGS84 Web 墨卡托投影.WGS84 UTM 投影.北京54高斯投影.西安80高斯投影.CGC ...

  5. [转]地理投影,常用坐标系详解、WGS84、WGS84 Web墨卡托、WGS84 UTM、北京54坐标系、西安80坐标系、CGCS2000坐标系

    转自:http://www.rivermap.cn/docs/show-1829.html 常用坐标系详解 (一)WGS84坐标系 WGS-84坐标系(World Geodetic System一19 ...

  6. Android消息传递之EventBus 3.0使用详解

    前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...

  7. [转载]AxureRP 7.0部件详解(一)

    本文为Axure RT7.0教程,本章主要介绍menu菜单.table表格.Tree Widget 树部件三个部件,后续将持续更新...... Menu 菜单 常用案例 网站导航菜单部件通常用于母板之 ...

  8. NPOI2.2.0.0实例详解(十)—设置EXCEL单元格【文本格式】 NPOI 单元格 格式设为文本 HSSFDataFormat

    NPOI2.2.0.0实例详解(十)—设置EXCEL单元格[文本格式] 2015年12月10日 09:55:17 阅读数:3150 using System; using System.Collect ...

  9. windows版mysql8.0安装详解

    2018年07月04日 13:37:40 Zn昕 阅读数 6433更多 分类专栏: mysql   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. ...

随机推荐

  1. 【loj3044】【zjoi2019】Minimax

    题目 描述 ​ 给出一颗树,定义根节点1的深度为1,其他点深度为父亲深度+1: ​ 如下定义一个点的点权: ​ 1.叶子:为其编号:2.奇数深度:为其儿子编号最大值:3.偶数深度:为其儿子编号最小值: ...

  2. 51nod1238 最小公倍数之和 V3

    又被这神仙题给坑爆了. 神仙题解. 一开始我把lcm变成ij/gcd然后按照常规套路去推,推到最后发现不是miu * Id而是miu · Id......这还搞鬼啊. 正解居然跟这个差不多,先转成求其 ...

  3. 【洛谷P2384】最短乘积路径

    题目大意:给定 N 个点,M 条边的有向图,边有边权,求从 1 号顶点到 N 号顶点的最短乘积路径.(经过的路径乘积最小)结果对9987取模. 乘积会爆 long long ,同时由于 dij 算法的 ...

  4. P4994 终于结束的起点

    P4994 终于结束的起点 现在,给你一个模数 M,请你求出最小的 n > 0,使得 \(\mathrm{fib}(n) \bmod M = 0, \mathrm{fib}(n + 1) \bm ...

  5. Linux命令之rmdir

    rmdir命令 用处:删除文件夹 用法:在终端中输入rmdir加上要删除的文件夹的名字 示例: (我要删除shuyunquan这个文件夹)

  6. JavaEE学习总结(十三)—JavaWeb、JSP、Servlet与DVD管理系统

    一.JSP基础知识 1.0.创建数据库与表 /* Navicat MySQL Data Transfer Source Server : 127.0.0.1 Source Server Version ...

  7. centos6.5环境下安装zk

    第一步:先下载安装包,解压. 第二步:进去根目录,创建data文件夹  mkdir  data 第三步:进去conf文件夹,修改  zoo_sample.cfg    的名字   mv zoo_sam ...

  8. .Net进阶系列(14)-异步多线程(async和await)(被替换)

    1.  方法名前只有async,但是方法中Task实例前没有await关键字,该方法和普通方法没有什么区别,但是会报一个警告. #region 情况一 /// <summary> /// ...

  9. git删除仓库的某个文件

    可以用git rm命令删除文件(删除远程仓库文件) git clone 仓库地址 git add . git rm 文件//本地中该文件会被删除 git rm -r文件夹 //删除文件夹 上面会把对应 ...

  10. 一个简单的"RPC框架"代码分析

    0,服务接口定义---Echo.java /* * 定义了服务器提供的服务类型 */ public interface Echo { public String echo(String string) ...