Swift Spritekit 我检测到碰撞,但它多次读取碰撞

标签 swift sprite-kit collision-detection

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/

相关文章:

swift - 检测两种相同颜色何时发生碰撞

collision-detection - 子弹物理质量中心和奇怪的物体 react

ios - 可以转换为 Swift 5

swift - 正在刷新 AVCaptureSession...?

ios - 导入 swift iOS 项目到另一个项目

swift - 创建无图像的无尽背景

xcode - SpriteKit 的更新函数 : time vs. framerate

swift - 完成 UIPickerView 上的工具栏

swift - 使用 SpriteKit 阻止对象碰撞

java - 如何使 Android View 成为矩形以外的形状