Swift SKPhysicsBody碰撞问题

时间:2015-08-02 05:26:21

标签: swift sprite-kit operator-overloading

所以我尝试使用两个SKPhysicsBody对象。我正在查看一些教程,以帮助处理碰撞机制并处理它。

我从其中一个教程中删除了这段代码:

    func didBeginContact(contact: SKPhysicsContact) {
        var firstBody: SKPhysicsBody
        var secondBody: SKPhysicsBody
        if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
            firstBody = contact.bodyA
            secondBody = contact.bodyB
        } else {
            firstBody = contact.bodyB
            secondBody = contact.bodyA
        }


        if ((firstBody.categoryBitMask & ColliderType.Bird != 0) &&
            (secondBody.categoryBitMask & ColliderType.Edge != 0)) {
                birdCollideWithEdge(firstBody.node as SKSpriteNode)
        }

    }

我的ColliderType设置如下:

enum ColliderType:UInt32 {
    case Bird = 1
    case Edge = 3
}

我得到的错误来自这一行:

 if ((firstBody.categoryBitMask & ColliderType.Bird != 0) &&
            (secondBody.categoryBitMask & ColliderType.Edge != 0))

错误是

  

无法找到&#39;&amp;&amp;&#39;接受提供的   参数

我已尝试将0转换为UInt32并将firstBody.categoryBitMask & ColliderType.Bird转换为Int,但这并没有帮助。

我也尝试将firstBody.categoryBitMask & ColliderType.Bird带出来并将其设置为它自己的变量,认为可能在if语句中有太多的事情但是没有解决任何问题任

任何人都可以帮助推动我找到合适的文档,这些文档可能会有所帮助,或者让我知道它是否会在当前的设置下工作。

提前致谢

编辑:将rawValue添加到ColliderType.Bird的末尾修复了我的错误。

1 个答案:

答案 0 :(得分:3)

您可以这样使用rawValue enum

if ((firstBody.categoryBitMask & ColliderType.Bird.rawValue != 0) && (secondBody.categoryBitMask & ColliderType.Edge.rawValue != 0)) {

}