我有一个游戏层和一个名为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?我现在已经苦苦挣扎了几天,但我根本无法让它发挥作用。变化几乎没有暗示我做错了什么。所以你几乎是我最后的希望......
答案 0 :(得分:1)
您想将导弹位置转换为世界空间:
CGPoint realPos = [self convertToWorldSpace:position];
如果它仍然不正确,也许您更改了anchorPoint?在这种情况下,视觉部分(纹理)将简单地从位置偏移,并且看起来可能看起来不正确。
至于self.parent.parent.parent等等......你应该read the latter part of this answer。这不是一个好习惯,因为它是一个脆弱的结构,当你改变节点层次结构时它很容易破坏。