didBeginContact 逻辑 OSX swift
didBeginContact logic OSX swift
我在创建 OSX 游戏时遇到 didBeginContact 内部逻辑的问题。它是用 swift 编写的,目前的代码是这样的:
func didBeginContact(contact: SKPhysicsContact) {
let collision: UInt32 = contact.bodyA.categoryBitMask |
contact.bodyB.categoryBitMask
if collision == PhysicsCategory.player | PhysicsCategory.wall {
} else if collision ==
PhysicsCategory.player | PhysicsCategory.box {
player.setJump(true)
} else if collision ==
PhysicsCategory.player | PhysicsCategory.floor {
player.setJump(true)
}
if collision ==
PhysicsCategory.laser | PhysicsCategory.wall {
effects = SKEmitterNode(fileNamed: "Explosion.sks")
addChild(effects!)
laser!.removeFromParent()
}
else if collision ==
PhysicsCategory.laser | PhysicsCategory.floor {
effects = SKEmitterNode(fileNamed: "Explosion.sks")
addChild(effects!)
laser!.removeFromParent()
}
我觉得这种混乱的 if 语句效率低得可怕,但我不知道如何将其转换为 switch 语句,或者这是否会更有效率。我已经尝试删除 'else' 并且只有一系列 'if' 语句但是当碰撞发生时我有更多的错误(盒子从墙上掉下来等..)任何建议都会被理解
万一有人无意中遇到这个问题,以下是我的解决方法。
let collision: UInt32 = contact.bodyA.categoryBitMask |
contact.bodyB.categoryBitMask
switch collision{
case PhysicsCategory.player | PhysicsCategory.floor:
playerObj.setJump(true)
case PhysicsCategory.player | PhysicsCategory.box:
playerObj.setJump(true)
case PhysicsCategory.player | PhysicsCategory.wall:
return
// ect...
default:
return
}
我在创建 OSX 游戏时遇到 didBeginContact 内部逻辑的问题。它是用 swift 编写的,目前的代码是这样的:
func didBeginContact(contact: SKPhysicsContact) {
let collision: UInt32 = contact.bodyA.categoryBitMask |
contact.bodyB.categoryBitMask
if collision == PhysicsCategory.player | PhysicsCategory.wall {
} else if collision ==
PhysicsCategory.player | PhysicsCategory.box {
player.setJump(true)
} else if collision ==
PhysicsCategory.player | PhysicsCategory.floor {
player.setJump(true)
}
if collision ==
PhysicsCategory.laser | PhysicsCategory.wall {
effects = SKEmitterNode(fileNamed: "Explosion.sks")
addChild(effects!)
laser!.removeFromParent()
}
else if collision ==
PhysicsCategory.laser | PhysicsCategory.floor {
effects = SKEmitterNode(fileNamed: "Explosion.sks")
addChild(effects!)
laser!.removeFromParent()
}
我觉得这种混乱的 if 语句效率低得可怕,但我不知道如何将其转换为 switch 语句,或者这是否会更有效率。我已经尝试删除 'else' 并且只有一系列 'if' 语句但是当碰撞发生时我有更多的错误(盒子从墙上掉下来等..)任何建议都会被理解
万一有人无意中遇到这个问题,以下是我的解决方法。
let collision: UInt32 = contact.bodyA.categoryBitMask |
contact.bodyB.categoryBitMask
switch collision{
case PhysicsCategory.player | PhysicsCategory.floor:
playerObj.setJump(true)
case PhysicsCategory.player | PhysicsCategory.box:
playerObj.setJump(true)
case PhysicsCategory.player | PhysicsCategory.wall:
return
// ect...
default:
return
}