我在SpriteKit中有一个子弹精灵类,我想与敌人的精灵发生碰撞。我像这样设置子弹的位掩码:
physicsBody?.categoryBitMask = PhysicsCategory.Bullet
physicsBody?.contactTestBitMask = PhysicsCategory.Enemy
physicsBody?.collisionBitMask = PhysicsCategory.None
(这是SKSpriteNode的子类,它允许我事先使用不带精灵对象的physicsBody。)
即便如此,当我用子弹打印子弹的categoryBitMask时,
println(physicsBody?.categoryBitMask)
打印出零。 (当我尝试使用相同方式设置的任何其他精灵时,它可以正常工作)
为什么即使我设置了categoryBitMask,它仍会打印出nil?
物理类别结构是:
struct PhysicsCategory {
static let None : UInt32 = 0
static let All : UInt32 = UInt32.max
static let Enemy : UInt32 = 0b1
static let Bullet : UInt32 = 0b10
static let Player : UInt32 = 0b11
static let Wall : UInt32 = 0b100
static let Star : UInt32 = 0b101
}
感谢您的帮助。
答案 0 :(得分:1)
首先,您创建类别位掩码的方式是错误的。他们应该两个人的力量,以便可以使用简单的AND operation
进行测试。
struct PhysicsCategory {
static let None : UInt32 = 0
static let All : UInt32 = UInt32.max
static let Enemy : UInt32 = 0b01
static let Bullet : UInt32 = 0b10
static let Player : UInt32 = 0b100
static let Wall : UInt32 = 0b1000
static let Star : UInt32 = 0b10000
}
在设置physicsBody
位掩码之前,您必须实例化SKSpriteNode
的{{1}}。
categoryBitMask
可以将其更改为您选择的任何其他形状。