现在的位置: 首页 > 综合 > 正文

小火来说 cocos2d-x 坐标转换API的详解

2018年05月05日 ⁄ 综合 ⁄ 共 2330字 ⁄ 字号 评论关闭

  做游戏的必须理解游戏中的坐标,发现很多人做cocos2d-x开发的并不理解 cocos2d-x中的坐标转换的几个API,今天抽了个时间给大

家讲解下,也算给自己巩固一遍知识吧!

Node->convertToNodeSpace(const Point & point) const;  //把参数中的这个坐标,转换成相对Node的本地坐标 注意:锚点 ,稍后详细介绍

Node->convertToNodeSpaceAR(const Point & point) const;//同上差不多,就是基于Node的锚点来转换的

Node->convertToWorldSpace(const Point & point) const; //把参数中的坐标转换成 Node的世界坐标的相对于 Node的距离

Node->conertToWorldSpaceAR(const Point &point) const;//同上差不多,就是基于Node的锚点来转换的


我们来详细的介绍下

首先 我们来看看
Node->convertToNodeSpace(const Point & point) const; 这个API

我先写一段代码
 
 
auto sp1=Sprite::create("1.png");
sp1->setPosition(100,100);  
 
this->addChild(sp1,1,1); //注意Sprite的默认锚点是 中心点。。。我不打算更改锚点

 auto
sp2=Sprite::create("2.png");
 sp2->setPosition(-100,-100);  
 this->addChild(sp2,1,1);
//注意Sprite的默认锚点是 中心点。。。我不打算更改锚点
 

 //注意看关键的时刻
Point point=sp1->convertToNodeSpace(sp2->getPosition()); 

这个point点的坐标是多少? 

 
这个Point绝对等于  (-200,-200) 为什么等于这个数勒?

我们来分析

 首先把 sp2的坐标转换成sp1坐标的相对坐标。那么计算的过程是这样的

以sp1坐标(锚点)为起始位置,向坐标出发,遇到sp2坐标(锚点)终止

因为cocos2d-x 是右手坐标系,向左为反方向

sp1坐标左边方向肯定负数,所以得出 sp2相对sp1节点的坐标是 -200,-200

那么如果sp2的坐标是  
auto sp2=Sprite::create("2.png");
 sp2->setPosition(150,150);  
 this->addChild(sp2,1,1);
//注意Sprite的默认锚点是 中心点。。。我不打算更改锚点
  
Point point=sp1->convertToNodeSpace(sp2->getPosition()); 
那么根据以上的结论可以得出 坐标为 (50,50)

那么我们可以得出一个概念:

如果在cocos2d-x使用Node->convertToNodeSpace(const Point &point)const; 

函数来转换坐标,那么得出的坐标是 该Node的(锚点)起始点,到参数Node2(锚点)终点,距离的X,Y。把Node看成是一个世界,

到另外一个世界的距离

====================================================
再来看看Node->convertToWorldSpace(const Point & point) const;

我们依然用上面的例子 

auto sp1=Sprite::create("1.png");
sp1->setPosition(100,100);  
 this->addChild(sp1,1,1);
//注意Sprite的默认锚点是 中心点。。。我不打算更改锚点

 auto
sp2=Sprite::create("2.png");
 sp2->setPosition(-100,-100);  
 this->addChild(sp2,1,1);
//注意Sprite的默认锚点是 中心点。。。我不打算更改锚点
  

//注意看关键的时刻
Point point=sp1->convertToWorldSpace(sp2->getPosition()); 

这个point点的坐标是多少? 
 

结果等于 (0,0); why ?

我们来分析下..
convertToWorldSpace函数的意思是 把参数的坐标转换成Node世界的坐标,把Node大小看成是一个世界,计算出参数中坐标被转换

以后在Node世界的坐标

那么好..我们按照这个思路来推理

sp1变成了一个世界,经过转换后sp2坐标变成了sp1世界中的一个坐标点位置

sp2的坐标是(-100,-100) 那么相对于sp1世界的(-100,-100)

由于sp1的锚点在中心,所以,sp1向左方向是反方向,而sp2的锚点也在中心,但是坐标是(-100,-100);

所以sp2的锚点肯定在sp1的左下点,, 然后用sp1的窗口坐标(OpenGl)加上sp2的坐标 就等于0,0

总结:
     convertToWorldSpace(const Point &point)函数 是求 参数坐标转换成为Node世界的坐标,在求出距离Node节点的距离

===========================================================================

上面还有两个API,其实算法和这两个类似.....我就不多说了...希望大家动手 做实验...

 因为上述有些地方可能组织的语言不够通俗...如果看不懂的朋友 可以给加我 QQ 471194425讨论

抱歉!评论已关闭.