我遇到的问题是我创建的用于检测接触的代码无法正常工作。我希望它在球类接触到障碍物类时起作用。我的代码有什么问题?非常感谢,感谢您的帮助!
这里是我定义类别的地方:
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 才能注册任何联系人。
关于swift - 为什么我的代码从未检测到与我的 SKPhysicsBody 有任何接触?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47275988/