【发布时间】:2015-11-22 07:33:04
【问题描述】:
所以我使用了一个简单的碰撞结构,然后我用它来为我的碰撞对象设置分类掩码(见下文)。 但是,为正确碰撞触发的 didBeginContact 函数表示碰撞节点 categoryBitMasks 为 1,无论哪个节点发生碰撞。我是不是做错了什么?
这是结构,非常类似于 Apple 的 DemoBots 示例:
struct ColliderStruct {
let rawValue: UInt32
var categoryMask: UInt32 {
return rawValue
}
static var Player: ColliderStruct { return self.init(rawValue: 1 << 0) }
static var AI: ColliderStruct { return self.init(rawValue: 1 << 1) }
static var Ball: ColliderStruct { return self.init(rawValue: 1 << 2) }
static var RedGoal: ColliderStruct { return self.init(rawValue: 1 << 3) }
static var BlueGoal: ColliderStruct { return self.init(rawValue: 1 << 4) }
static var Arena: ColliderStruct { return self.init(rawValue: 1 << 5) }
var hashValue: Int {
return Int(rawValue)
}
}
我这样设置类别:
arenaGeometry.physicsBody!.categoryBitMask = ColliderStruct.Arena.hashValue
然后我像这样检查它们:
func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact) {
//printing to test
print("A bitmask: \(contact.nodeA.categoryBitMask), B bitmask: \(contact.nodeB.categoryBitMask)")
if (contact.nodeA.categoryBitMask == ColliderStruct.Player.hashValue || contact.nodeB.categoryBitMask == ColliderStruct.Player.hashValue ) {
print("player hit something!")
}
}
}
但是,位掩码始终报告为 1,并且冲突永远不会通过第二个打印语句:
A bitmask: 1, B bitmask: 1
我已经盯着这个太久了,有什么明显的问题吗? 非常感谢。
【问题讨论】: