只需在第一次接触时发生SpriteKit碰撞

时间:2014-08-21 21:26:22

标签: objective-c swift sprite-kit

我目前有两个节点在使用,其中一个是船(多边形),另一个是直的垂直矩形。船需要是一个多边形,以便它可以通过射弹击中,但是当它与垂直矩形碰撞时,由于它接触到的许多边,这会引起我的问​​题。因此,我想要运行一段代码而不是多次运行。

是否有冲突检测只对第一次接触起作用,以便它不会重复呼叫?

我知道将categoryBitMask设置为0,但这样做会使船无法被其他任何东西击中 - 这是我不想要的。此外,我考虑使用布尔变量仅在船经过时运行一次代码,但是如前所述,由于不同的侧面,代码认为它已经通过,而实际上它只是碰到船的另一侧。 / p>

除了设置物理实体之外,我没有太多的代码可以显示,所以我认为没有必要,但在didBeginContact()中我使用了categoryBitMask比较来检查碰撞。

我可能没有解释得很好,在这种情况下我道歉,我的英语不是最好的!

如果有人可以提供帮助,非常感谢,谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用

将船舶的各个物理实体组合成一个整体
+ (SKPhysicsBody *)bodyWithBodies:(NSArray *)bodies

然后测试与复合体的接触而不是单个组件。

答案 1 :(得分:0)

如果你是节点的子类,那么只需为它创建一个BOOL属性。

BOOL alreadyHit;

如果您不是子类,请使用SKNode的userData字典并为其创建条目。