Swift Spritekit我检测到一个collison但它多次读取碰撞

时间:2017-06-05 23:33:35

标签: swift sprite-kit collision-detection

AppImage我有一个4个不同颜色的矩形墙,穿过墙壁,球的颜色必须与墙上的矩形相匹配。球将穿过墙壁,并出现一堵新墙。但是,当我检测到这种碰撞时,我会得到多个碰撞读数。我已经通过打印死或活来测试它,并且它打印两次或更多次。

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")
        }
    }
}      

请帮助!!!

1 个答案:

答案 0 :(得分:3)

是的 - 这发生了。处理它的方法(你不能让sprite-kit在某些情况下多次调用didBegin)是为了确保你的联系代码适应这种情况,多次处理合同不会导致问题(例如多次添加分数,删除多个生命,尝试访问已删除的节点或physicsBody等)。

这里有一个讨论:Sprite-Kit registering multiple collisions for single contact

您可以做的一些事情包括:

  • 如果您删除了联系的节点,请先检查它是否为nil 你删除它(对于重复的联系人)
  • 将节点添加到集合中,然后删除集合中的所有节点 didFinishUpdate
  • 向节点的userData
  • 添加“非活动”标记
  • 使节点成为SKSpriteNode的子类并添加inactive属性
  • Etc等。