具有 categoryBitMask 的精灵仍然 returns 'nil'

Sprite with categoryBitMask still returns 'nil'

我在 SpriteKit 中有一个子弹精灵 class,我想与敌方精灵发生碰撞。我这样设置项目符号的位掩码:

    physicsBody?.categoryBitMask = PhysicsCategory.Bullet
    physicsBody?.contactTestBitMask = PhysicsCategory.Enemy
    physicsBody?.collisionBitMask = PhysicsCategory.None

(这是在 SKSpriteNode 的一个子class 中,它允许我使用事先没有精灵对象的 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

}

感谢您的帮助。

首先你创建类别位掩码的方式是错误的。他们应该 2 的幂 以便可以使用简单的 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

}

在设置 categoryBitMask 位掩码之前,您必须实例化 SKSpriteNodephysicsBody

self.physicsBody = SKPhysicsBody(rectangleOfSize: size)

它可以更改为您选择的任何其他形状。