处理位掩码的一种简单方法是在Swift中创建一个UInt32类型的枚举,其中包含了所有不同的碰撞类型。具体如下
enum ColliderType: UInt32 {
case Player = 1
case Attacker = 2
}
然后在您的玩家类中添加物理引擎并设置碰撞检测。
physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(size.width, size.height))
physicsBody.categoryBitMask = ColliderType.Player.toRaw()
physicsBody.contactTestBitMask = ColliderType.Attacker.toRaw()
physicsBody.collisionBitMask = ColliderType.Attacker.toRaw()
对于你的攻击者类(或弹丸、鸟、流星等),设置它的物理体:
physicsBody = SKPhysicsBody(circleOfRadius: size.width / 2)
physicsBody.categoryBitMask = ColliderType.Attacker.toRaw()
physicsBody.contactTestBitMask = ColliderType.Player.toRaw()
physicsBody.collisionBitMask = ColliderType.Player.toRaw()
请注意,您可以设置物理体的形状为任何形状。
然后确保设置了
SKPhysicsContactDelegate
(例如,您可以让场景成为代理),然后实现
可选协议方法
didBeginContact
。
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
physicsWorld.contactDelegate = self
}
func didBeginContact(contact: SKPhysicsContact!) {
println("A collision was detected!")
if (contact.bodyA.categoryBitMask == ColliderType.Player.toRaw() &&
contact.bodyB.categoryBitMask == ColliderType.Attacker.toRaw()) {
println("The collision was between the Player and the Attacker")
}
}
}
通过添加更多的ColliderTypes,您可以在游戏中检测到更多的碰撞。