cocos 节点坐标和世界坐标转换 个人理解与应用
关于this.node.convertToWorldSpaceAR(cc.v2(0,0))与 this.node.convertToNodeSpaceAR(cc.v2(0,0)), 相信每个人都已经知道字面意思且拜读过大部分相同的文章,我看过几十篇了吧,然而还是不能理解与正确使用(自认为不是很傻…请不要鄙视往下看吧…)
这里呢,经过我反复的试验与思考,我将给和我一样懵…的童鞋们分享下:
- 在介绍这两个坐标转换前呢,先说下this.node.getPosition与this.node.setPosition
这俩呢,都是在节点坐标下使用的,什么意思呢?
比如说:以下图为例,一个母节点block(蓝色精灵节点)和它的子节点mid(红色精灵节点),其中m的母节点为canvas;黑色精灵节点player的母节点也为canvas。
那么,我们从cocos上看到的蓝色精灵节点(block)的Position坐标是什么呢?
就是这个节点的节点坐标,并不是世界坐标。
如果我们用this.block.getPosition()得到的就是当前节点的节点坐标。
再说细点就是,canvas的锚点坐标为cc.v2(0,0),block的世界坐标与canvas的锚点坐标差值就是block的节点坐标。 block的世界坐标cc.v2(230, 250) 减去canvas的世界坐标cc.v2(480, 320) 就等于block的节点坐标 cc.v2(-250, -70)。
那么, 如果要用setPosition的话,也是一样,要先把世界坐标换成block的母节点下的节点坐标,再赋给setPosition,说的好复杂,以下为代码实现。
var w_pos = cc.v2(230, 250)//也可以随便别的位置。
this.block.setPosition(this.block.parent.convertToNodeSpaceAR(w_pos))
总结下,getPosition和setPosition都是针对使用对象(比如说红色节点mid)的节点坐标。那么,在使用的时候呢,就有以下几种情况:
1.var n_pos = this.mid.getPosition() //节点坐标,母节点为block, mid节点坐标为(-10, 10)
2… var w_pos = this.mid.convertToWorldSpaceAR(cc.v2(0, 0)) //获取当前节点的世界坐标
比如 mid节点坐标为(-10, 10),而它的世界坐标为(240, 160)
转化为世界坐标的时候,不用考虑母节点,可以直接转化。
3… setPosition()上面举了个例子,这里再说个别的吧,因为是母节点下的节点坐标,所以要先确定是同一个母节点吗?
4… 比如母节点一m1有个子节点c1,母节点二m2有个子节点c2。如果我想把c1放到当前c2的位置应该怎么写代码呢?
步骤一,获取当前c2的世界坐标c2_w_pos;
步骤二,将c2_w_pos转化为母节点一m1的节点坐标m1_n_pos;
步骤三, 将m1_n_pos赋值给setPostion: this.c1.setPosition(m1_n_pos)
最后说下以下代码中有个 e.getLocation(); 这里的getLocation()获取的是世界坐标。
所以如果想把点击的位置赋值给节点,用setPosition要先转化为母节点下的的节点坐标。
this.node.on(cc.Node.EventType.TOUCH_START, function(e) {
var w_pos = e.getLocation()
}.bind(this), this)
如果有错,欢迎指正,不喜勿喷…谢谢!
cocos 节点坐标和世界坐标转换 个人理解与应用相关推荐
- 相机标定(二)——图像坐标与世界坐标转换
相机标定(一)--内参标定与程序实现 相机标定(二)--图像坐标与世界坐标转换 相机标定(三)--手眼标定 一.坐标关系 相机中有四个坐标系,分别为world,camera,image,pixel w ...
- 相机照片的像素坐标和世界坐标转换
相机坐标和世界坐标变换原理就是在4个坐标系直接转换, 如果考虑GIS系统那么还需要考虑空间参考坐标, 空间参考坐标系又需要考虑地理和投影坐标系, 加起来就是6个坐标系. 示例图如下 此段代码基于op ...
- 图像坐标与世界坐标转换
一.坐标变换详解 1.1 坐标关系 相机中有四个坐标系,分别为world,camera,image,pixel world为世界坐标系,可以任意指定轴和轴,为上图P点所在坐标系. camera为相机坐 ...
- cocos子节点转父节点坐标 原理浅析(局部坐标转世界坐标同理)
在CCNode的类中,有一个得到 一个节点坐标系转换父亲坐标系的一个矩阵,节点内坐标乘以这个矩阵,就可以转换为在节点父节点中的坐标,方法名为: Mat4& Node::getNodeToPar ...
- 关于相机坐标到投影空间坐标转换的理解
在记录此文前看过许多3D介绍的书籍,却总未能理解相机坐标至空间坐标转换的情况,网上搜索亦五花八门,多是文章转载,时而见文式有误亦未有异议,尚未知其人是否曾读此文章.因而自己推导与想像,总算能观其义.故 ...
- 2.cocos2d-x坐标体系(UI坐标系,GL坐标系,本地坐标,世界坐标,节点坐标)
openGL & UI坐标体系 OpenGL坐标系:该坐标原点在屏幕左下角,x轴向右,y轴向上.这也就是cocos2dx中用到的坐标系. 屏幕坐标系:该坐标系的原点在屏幕左上角,x轴向右 ...
- 火星坐标、百度坐标、WGS84坐标转换代码(JS、python版)
火星坐标.百度坐标.WGS84坐标转换代码(JS.python版) 一.JS版本源码 github:https://github.com/wandergis/coordTransform /*** C ...
- PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例
PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 原文:PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 <!--小幅的坐标转换点位程 ...
- java 火星坐标转wgs84_js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
本文实例讲述了js中火星坐标.百度坐标.WGS84坐标转换实现方法.分享给大家供大家参考,具体如下: //定义一些常量 var x_PI = 3.14159265358979324 * 3000.0 ...
- c语言经纬度和大地坐标转换,经纬度坐标与大地坐标转换表
*子午线角度值纬度值b经度值l角度值角度值f2-b2 114114 114114 114114 114114 1 234.565411113.59429634.94836113.9953-0.0047 ...
最新文章
- mysql双主使用reset master清除日志要小心
- 谷歌施密特:美人才签证政策让硅谷转移到中国
- 5分钟,带你领略项目经理十年的功力
- 提高编程能力的7条建议
- java 数组 内存_图解Java数组的内存分配
- oracle扩容日志文件,调整Oracle Redo Logfile日志文件的大小
- 系统延时任务及定时任务
- python numpy安装windows_windows 下python+numpy安装实用教程
- 一个SQL SERVER功能模块表
- 李洪强iOS开发之OC[011] - 有参方法的声明实现以及调用练习
- 代码之美~Func让构造方法为属性赋值更灵活
- 爬取TAPTAP游戏应用榜单
- 淘宝、京东、苏宁易购技术架构分析
- 总结:Python 轻量级序列化和反序列化包 marshmallow 详细使用指南
- Unreal Engine 4 渲染目标(Render Target)教程 之 使用渲染目标绘制(下)
- 054 webshell介绍与文件上传漏洞
- IT桔子IT互联网公司产品数据库及商业信息服务
- 【经验科普】实战分析C工程代码可能遇到的编译问题及其解决思路
- 图像分割之 Geodesic segmentation 和 Graph-Cut
- 脑电信号(EEG)简介:原理、应用与分析方法