【发布时间】:2017-08-13 22:55:56
【问题描述】:
我试图弄清楚设置枚举时检测碰撞的工作原理。我有几个不同的节点,我可以检测到碰撞并设置了工作,但是我刚刚完成了它并且不知道如何正确设置它。
enum ColliderType: UInt32{
case ship = 1
case object = 2
case fuel = 4
case alien = 8
case torp = 16
}
然后我将每个节点设置为这样:
mete.physicsBody!.contactTestBitMask = ColliderType.object.rawValue
mete.physicsBody!.categoryBitMask = ColliderType.object.rawValue
mete.physicsBody!.collisionBitMask = ColliderType.object.rawValue
alien.physicsBody!.contactTestBitMask = ColliderType.torp.rawValue
alien.physicsBody!.categoryBitMask = ColliderType.alien.rawValue
alien.physicsBody!.collisionBitMask = ColliderType.alien.rawValue
fuel.physicsBody!.contactTestBitMask = ColliderType.ship.rawValue
fuel.physicsBody!.categoryBitMask = ColliderType.fuel.rawValue
fuel.physicsBody!.collisionBitMask = ColliderType.fuel.rawValue
ship.physicsBody!.contactTestBitMask = ColliderType.object.rawValue
ship.physicsBody!.categoryBitMask = ColliderType.ship.rawValue
ship.physicsBody!.collisionBitMask = ColliderType.ship.rawValue
torpedoNode.physicsBody!.contactTestBitMask = ColliderType.alien.rawValue
torpedoNode.physicsBody!.categoryBitMask = ColliderType.torp.rawValue
torpedoNode.physicsBody!.collisionBitMask = ColliderType.alien.rawValue
然后为了检测船和仪表之间的碰撞,我正在使用以下代码:
if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue
船与我使用的燃料发生碰撞:
if contact.bodyA.categoryBitMask == ColliderType.fuel.rawValue || contact.bodyB.categoryBitMask == ColliderType.fuel.rawValue {
最后是鱼雷和外星人之间的碰撞,我使用以下代码:
if contact.bodyA.categoryBitMask == ColliderType.alien.rawValue || contact.bodyB.categoryBitMask == ColliderType.torp.rawValue {
一切正常,但是我现在正试图检测飞船和外星人之间的碰撞,但我不知道该怎么做。我需要尝试理解逻辑并清理此代码。
【问题讨论】:
-
你所拥有的“ColliderType”只是一个物理类别。为对象的 collisionBitMask 和 contactTestBitMask 设置一个类别并没有多大意义。
-
这里有很多答案可以解释您感兴趣的内容:stackoverflow.com/a/39064710、stackoverflow.com/a/31111039 等...
-
首先了解contacts和collisions之间的区别并开始使用正确的术语 - 你没有检测到碰撞,你检测到联系人.- stackoverflow.com/documentation/sprite-kit/6261/…
标签: swift enums sprite-kit collision