具有 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
位掩码之前,您必须实例化 SKSpriteNode
的 physicsBody
。
self.physicsBody = SKPhysicsBody(rectangleOfSize: size)
它可以更改为您选择的任何其他形状。
我在 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
位掩码之前,您必须实例化 SKSpriteNode
的 physicsBody
。
self.physicsBody = SKPhysicsBody(rectangleOfSize: size)
它可以更改为您选择的任何其他形状。