我一直在尝试学习Scenekit并完成了一本书,但是只有碰撞检测部分不被理解,这也许是最重要的部分。 有类别蒙版,共谋蒙版和Physicalbody?.contactTestBitMask。
我想创建一个简单的游戏来解决这个问题,但是我陷入了困境。我不确定我的主意。
在游戏中,有一个球并收集珍珠,并且远离岩石和孔洞。在这种情况下:
类别面具:
physicsBody?.contactTestBitMask:
Collusion掩码为1,因为它们都相互碰撞。
我不确定是否遇到此冲突问题。因此,在我开始编写代码之前,我想确定一下。在SCNPhysicsContactDelegate中,下面的函数解决了彼此接触时的学习方法:
physicsWorld(_ didBegin contact: _) {
var contactNode:SCNNode!
if contact.nodeA.name == "ball" {
contactNode = contact.nodeB
} else {
contactNode = contact.nodeA
}
if contactNode.physicsBody?.categoryBitMask == 0b0010 {
// mean pearls
// raise score etc
}
if contactNode.physicsBody?.categoryBitMask == 0b0100 || 0b1000{
if contactNode.name == "Rock" { print("You rocked") }
if contactNode.name == "Hole" { print("You need to climb") }
}
}
我已经搜索了youtube和堆栈,但是只有一种解释。 Stack Link Youtube视频没有解释这些。 这本书的例子受版权保护,所以我不能在这里放它们。
谢谢你, 祝你有美好的一天。
答案 0 :(得分:0)
您没有使用按位运算符。 https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html
更改
if contactNode.physicsBody?.categoryBitMask == 0b0100 || 0b1000
到
if contactNode.physicsBody?.categoryBitMask == 0b0100 | 0b1000
单曲|和&是用于此类按位运算的正确运算符。