节点层次结构和坐标让我疯狂

时间:2012-09-18 10:58:13

标签: iphone objective-c cocos2d-iphone

我有一个游戏层和一个名为TestNode的子节点(CCNode)。我向TestNode添加了一个spritesheet,并为这个spritesheet添加了几个“导弹”。现在我的问题是这些导弹与游戏层中的物体的碰撞检测,因为坐标似乎已经过了。

我在导弹实施方面有以下几点:

//first I get the Game layer
GameLayer *gL = (GameLayer *)self.parent.parent.parent; 
//parent = spritesheet, spritesheet's parent = TestNode, TestNode's parent = Game layer

//Now I convert the coordinates of missile to Game Layer's node space
CGPoint realPos = [gL convertToNodeSpace:self.position];

这大致就是我在我的代码中所做的......而且它似乎没有起作用!我使用TestNode做了几乎相同的碰撞检测,它似乎工作得非常好。是因为spritesheet?我现在已经苦苦挣扎了几天,但我根本无法让它发挥作用。变化几乎没有暗示我做错了什么。所以你几乎是我最后的希望......

1 个答案:

答案 0 :(得分:1)

您想将导弹位置转换为世界空间:

CGPoint realPos = [self convertToWorldSpace:position];

如果它仍然不正确,也许您更改了anchorPoint?在这种情况下,视觉部分(纹理)将简单地从位置偏移,并且看起来可能看起来不正确。

至于self.parent.parent.parent等等......你应该read the latter part of this answer。这不是一个好习惯,因为它是一个脆弱的结构,当你改变节点层次结构时它很容易破坏。