AppImage我有一面由 4 个不同颜色的矩形组成的墙,要穿过墙,球的颜色必须与墙上矩形的颜色相匹配。球会穿过墙,新的墙会出现。然而,当我检测到这种碰撞时,我得到了多个碰撞读数。我已经通过打印 dead or alive 来测试它,并且它打印了两次或更多次。
func didBegin(_ contact: SKPhysicsContact) {
if let nodeA = contact.bodyA.node as? SKShapeNode, let nodeB = contact.bodyB.node as? SKShapeNode {
if nodeA.fillColor != nodeB.fillColor {
print("DEAD")
}
else {
print("Alive")
}
}
}
请帮忙!!!
最佳答案
是的 - 这种情况发生了。处理它的方法(在某些情况下你不能让 sprite-kit 多次调用 didBegin
)是确保你的联系代码适应这个并且多次处理契约(Contract)不会导致问题(例如多次添加到分数、删除多个生命、尝试访问已删除的节点或物理体等)。
这里有讨论:Sprite-Kit registering multiple collisions for single contact
您可以做的一些事情包括:
- 如果你删除了一个被联系的节点,在之前检查它是否为
nil
你删除它(对于重复的联系人) - 将节点添加到集合中,然后删除集合中的所有节点
didFinishUpdate
- 向节点的
userData
添加一个“inactive”标志 - 使节点成为 SKSpriteNode 的子类并添加一个
inactive
属性 - 等等
关于Swift Spritekit 我检测到碰撞,但它多次读取碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44379222/