谢谢谢谢!ConvertToNodeSpace()与ConvertToWorldSpace()的疑问,请不吝赐教,谢谢

在官网上看到关于这两个函数的解释,其中有一些不解的地方,请各位能帮忙解惑,谢谢!

-------------------------------以下是官网的解释-------------------------------------------
关于世界坐标系和本地坐标系的相互转换,在Node中定义了以下四个常用的坐标变换的相关方法。

// 把世界坐标转换到当前节点的本地坐标系中
Point convertToNodeSpace(const Point& worldPoint) const;

// 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Point convertToWorldSpace(const Point& nodePoint) const;

// 基于Anchor Point把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Point convertToNodeSpaceAR(const Point& worldPoint) const;

// 基于Anchor Point把世界坐标转换到当前节点的本地坐标系中
Point convertToWorldSpaceAR(const Point& nodePoint) const;
下面通过一个例子来说明这四个方法的理解和作用:

auto *sprite1 = Sprite::create(“HelloWorld.png”);
sprite1->setPosition(ccp(20,40));
sprite1->setAnchorPoint(ccp(0,0));
this->addChild(sprite1); //此时添加到的是世界坐标系,也就是OpenGL坐标系

auto *sprite2 = Sprite::create(“HelloWorld.png”);
sprite2->setPosition(ccp(-5,-20));
sprite2->setAnchorPoint(ccp(1,1));
this->addChild(sprite2); //此时添加到的是世界坐标系,也就是OpenGL坐标系

//将 sprite2 这个节点的坐标ccp(-5,-20) 转换为 sprite1节点 下的本地(节点)坐标系统的 位置坐标
Point point1 = sprite1->convertToNodeSpace(sprite2->getPosition());

//将 sprite2 这个节点的坐标ccp(-5,-20) 转换为 sprite1节点 下的世界坐标系统的 位置坐标
Point point2 = sprite1->convertToWorldSpace(sprite2->getPosition());

log(“position = (%f,%f)”,point1.x,point1.y);
log(“position = (%f,%f)”,point2.x,point2.y);

运行结果:

Cocos2d: position = (-25.000000,-60.000000)
Cocos2d: position = (15.000000,20.000000)
convert1

convert2

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


我的疑问:convertToNodeSpace()中传入坐标(-5,-20)是相对于sprite1,sprite2同一个世界坐标的,然后将该坐标点转换为以sprite2的锚点为基点的坐标系中的坐标,得出答案是(-25,-60).而convertToWorldSpace()中传入的坐标(-5,-20)是相当于sprite1的相对坐标,然后将该坐标点转换为在sprite2的世界坐标系中的坐标,得出答案是(15,20)。是这样理解的吗?只有这样理解才能匹配答案,请问是不是我理解错了,可是理论上这两个函数中传入的参数应该是同一个意思,怎么能产生这两种理解呢?请你一定要帮忙解我心中疑惑,谢谢