IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> cocos2dx 坐标之convertToNodeSpace、convertToWorldSpace、convertToNodeSpaceAR、convertToWorldSpaceAR区别和用法 -> 正文阅读

[游戏开发]cocos2dx 坐标之convertToNodeSpace、convertToWorldSpace、convertToNodeSpaceAR、convertToWorldSpaceAR区别和用法

convertToNodeSpace、convertToWorldSpace,都是以参照物的坐下角作为坐标点原点,向右和向上创建坐标系。
convertToNodeSpace:获得的坐标相对于参照物的坐标。
convertToWorldSpace:获得的坐标是参照物所在的坐标系中的坐标,即转换到参照物的世界坐标。

convertToNodeSpaceAR、convertToWorldSpaceAR,是以参照物的锚点为原点,向右、向上创建坐标系。
convertToNodeSpaceAR:获得的坐标相对于参照物的坐标(此时坐标系的原点在参照物的锚点)。
convertToWorldSpaceAR:获得的坐标是参照物所在的坐标系中的坐标,即转换到参照物的世界坐标(此时坐标系的原点在参照物的锚点)。

验证:
Sprite *sprite1 = Sprite::create("CloseNormal.png");
sprite1->setPosition(Point(100,100));
this->addChild(sprite1);
 
Sprite *sprite2 = Sprite::create("CloseNormal.png");
sprite2->setPosition(Point(200,200));
this->addChild(sprite2);
 
auto point1 = sprite1->convertToNodeSpace(sprite2->getPosition());
auto point2 = sprite1->convertToWorldSpace(sprite2->getPosition());
auto point3 = sprite1->convertToNodeSpaceAR(sprite2->getPosition());
auto point4 = sprite1->convertToWorldSpaceAR(sprite2->getPosition());
log("position = (%f,%f)",point1.x, point1.y);
log("position = (%f,%f)",point2.x, point2.y);
log("position = (%f,%f)",point3.x, point3.y);

输出结果:
position = (120.000000,120.000000)
position = (280.000000,280.000000)
position = (100.000000,100.000000)
position = (300.000000,300.000000)

总结:
不带AR的是以参照物的坐下角作为坐标原点,向右、向上创建坐标系。
带AR的是以参照物的锚点为原点,向右、向上创建坐标系。

convertToWorldSpace它是一层一层向上回溯找其父结点的变换矩阵的,所以最后能求到最上层父结点的变换矩阵,也就求得了世界坐标系。所以
posBullet = (bullet->getParent())->convertToWorldSpace(bullet->getPosition()); 此方法是正确的

local delBtnTxt = self.resetBtn.delBtnTxt
    print("delBtnTxt 本地坐标: ", delBtnTxt:getPosition())
    local wx, wy = delBtnTxt:getParent():convertToWorldSpace(delBtnTxt:getPosition())
    print("resetBtn 世界坐标: ", wx, wy)
    local lx, ly = self.resetBtn:convertToNodeSpace(wx, wy)
    print("delBtnTxt 本地坐标2: ", lx, ly)

输出:
 delBtnTxt  本地坐标:        57.799999237061 53.720001220703
 resetBtn  世界坐标:         336.79998779297 238.7200012207
 delBtnTxt  本地坐标2:       57.799987792969 53.720001220703

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:58:02  更:2022-02-28 15:58:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:50:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码