场景工具包联系catagoryBitMasks总是返回1

时间:2015-11-21 21:32:05

标签: ios swift scenekit

所以我使用了一个简单的碰撞结构,然后我用它为我的碰撞对象设置catagoryMasks(见下文)。 但是,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,并且碰撞永远不会通过第二个print语句:

A bitmask: 1, B bitmask: 1

我一直盯着这个太长时间,明显错了什么? 非常感谢。

1 个答案:

答案 0 :(得分:3)

有时您只需稍微退一步。

print("A bitmask: \(contact.nodeA.categoryBitMask), B bitmask: \(contact.nodeB.categoryBitMask)")

应该是

print("A bitmask: \(contact.nodeA.physicsBody!.categoryBitMask), B bitmask: \(contact.nodeB.physicsBody!.categoryBitMask)")