为什么我的代码从未检测到与我的 SKPhysicsBody 有任何接触?

Why is my code never detecting any contact with my SKPhysicsBody?

我 运行 遇到的问题是我创建的用于检测联系人的代码无法正常工作。我希望它在球类接触到障碍物类时起作用。我的代码有什么问题?非常感谢,感谢您的帮助!

这里是我定义类别的地方:

let ballCategory : UInt32 = 0x1 << 1
let obstacleCategory : UInt32 = 0x1 << 2

这是我创建球的物理方面的地方:

    leftBall.physicsBody = SKPhysicsBody(rectangleOf: leftBall.size)
    leftBall.physicsBody?.categoryBitMask = ballCategory
    leftBall.physicsBody?.contactTestBitMask = obstacleCategory
    leftBall.physicsBody?.affectedByGravity = false
    leftBall.physicsBody?.isDynamic = false
    leftBall.physicsBody?.collisionBitMask = 0

这是我创建障碍物物理方面的地方:

    obstacleSquare.physicsBody = SKPhysicsBody(rectangleOf: obstacleSquare.size)
    obstacleSquare.physicsBody?.categoryBitMask = obstacleCategory
    obstacleSquare.physicsBody?.contactTestBitMask = ballCategory
    obstacleSquare.physicsBody?.affectedByGravity = false
    obstacleSquare.physicsBody?.isDynamic = false
    obstacleSquare.physicsBody?.collisionBitMask = 1

这是我的碰撞检测函数:

func didBegin(_ contact: SKPhysicsContact) {

    print("CONTACT")

    if contact.bodyA.categoryBitMask == obstacleCategory {

        print("CONTACT")
        gameOver()

    }

    if contact.bodyB.categoryBitMask == obstacleCategory {

        print("CONTACT")
        gameOver()

    }

    if contact.bodyA.categoryBitMask == ballCategory {

        print("CONTACT")
        gameOver()

    }

    if contact.bodyB.categoryBitMask == ballCategory {

        print("CONTACT")
        gameOver()

    }

}

您对象的两个物理体都将 isDynamic 属性 设置为 false。他们中至少有一个需要将此 属性 设置为 true 才能注册任何联系人。