Swift SpriteKit 使用 3 个节点设置 collisions/contact 位掩码

Swift SpriteKit Setting up collisions/contact bitmasks with 3 nodes

我有几个碰撞设置在我的应用程序中完美运行,但是我终生无法让最后 2 个碰撞在同一个节点上运行。

这是我的:

alien.physicsBody!.contactTestBitMask = ColliderType.object.rawValue
alien.physicsBody!.categoryBitMask = ColliderType.object.rawValue | ColliderType.torp.rawValue
alien.physicsBody!.collisionBitMask = ColliderType.object.rawValue

ship.physicsBody!.contactTestBitMask = ColliderType.ship.rawValue | ColliderType.object.rawValue
ship.physicsBody!.categoryBitMask = ColliderType.ship.rawValue
ship.physicsBody!.collisionBitMask = ColliderType.ship.rawValue


torpedoNode.physicsBody!.contactTestBitMask = ColliderType.torp.rawValue
torpedoNode.physicsBody!.categoryBitMask = ColliderType.torp.rawValue
torpedoNode.physicsBody!.collisionBitMask = ColliderType.torp.rawValue

如上代码,torp与外星人接触。然而,飞船并没有联系外星人。

如果我从外星人类别 BitMask 中删除 "ColliderType.torp.rawValue",那么飞船确实会联系外星人,但 torp 不会联系飞船。

我使用的飞船联系外星人:

if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue

为了让 torp 联系我使用的外星人:

if contact.bodyA.categoryBitMask == ColliderType.torp.rawValue || contact.bodyB.categoryBitMask == ColliderType.torp.rawValue {

我怎样才能同时工作?!我花了几天时间,就是无法理解它。

我可以让任何一个都完美地工作,只是不能同时使用。

对于遇到同样问题的任何人,在这种情况下,@Alex Ingram 希望外星人与飞船和鱼雷相撞,这是对他有帮助的解决方案。

alien.physicsBody!.contactTestBitMask = ColliderType.ship.rawValue | ColliderType.torp.rawValue
alien.physicsBody!.categoryBitMask = ColliderType.object.rawValue //Im assuming this is his alien's BitMask
alien.physicsBody!.collisionBitMask = none

然后,在didBeginContact中他不得不写下

 //alien contacting the torpedo
if contact.bodyA.categoryBitMask == ColliderType.object.rawValue && contact.bodyB.categoryBitMask == ColliderType.torp.rawValue{
   //then do the following
   }
 //alien contacting the ship
if contact.bodyA.categoryBitMask == ColliderType.object.rawValue && contact.bodyB.categoryBitMask == ColliderType.ship.rawValue{
       //then do the following
       }