所以我尝试使用两个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
的末尾修复了我的错误。
答案 0 :(得分:3)
您可以这样使用rawValue
enum
:
if ((firstBody.categoryBitMask & ColliderType.Bird.rawValue != 0) && (secondBody.categoryBitMask & ColliderType.Edge.rawValue != 0)) {
}