cocos2dx纯新手,勿喷:
最近研究cocos2dx坐标系,找到这篇文档,在最后一章列举了一个例子,但是解释有点问题:
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);
```
第一条比较好理解,
this->add(sprite1)
this->add(sprite2)
他们都有同一个父对象
convertToNodeSpace:“根据他们目前的位置,计算节点sprite1坐标到sprite2坐标的距离”,这个没有问题,结果(-25,-60)。
第二条会有点问题,
基于sprite1的坐标,把sprte2的坐标转换为世界坐标,
基于前面的条件,他们共有一个父对象
此时会有一个错误的理解:
convertToWorldSpace会暗示为sprite1坐标是原点,计算sprite2的坐标到原点距离:(-25,-60),但文档得出的结果却是(15,20),怎么会不相同?
反复计算之后,突然发现,原来文档漏掉了一个隐含条件,就是:
this->add(sprite1)
sprite1->add(sprite2)
convertToWorldSpace:“把sprite2加入sprite1中,计算sprite2的相对世界坐标的位置,sprite1的坐标加上sprite2的坐标,即(20-5,40-20)”,这样就能得到(15,20)
希望文档最后能把这个加上去,