我在创建的 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
}
关于macos - didBegin联系逻辑 OSX swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30830748/