带有categoryBitMask的Sprite仍然会返回' nil'

时间:2015-03-24 01:59:14

标签: ios swift sprite-kit skspritenode skphysicsbody

我在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

}

感谢您的帮助。

1 个答案:

答案 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

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