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
}