Swift SpriteKit 使用 3 个节点设置碰撞/接触位掩码

标签 swift collision contacts

我有几个碰撞设置在我的应用程序中完美运行,但是我终生无法让最后 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
       }

关于Swift SpriteKit 使用 3 个节点设置碰撞/接触位掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43018231/

相关文章:

ios - 添加和删​​除作为单个对象包的联系人(如在 Facebook Messenger 中)

ios - iOS 中的自定义 View 类未调用委托(delegate)事件

ios - 用户默认值 Swift

active-directory - 访问电子邮件和移动客户端中的联系人 : LDAP or CardDAV?

C 中的碰撞检测

Java 游戏开发 - Sprite 碰撞?

php - 在同一页面上激活实现 css 表单?

ios - 在没有 Storyboard的情况下编写 iOS 8 共享扩展

ios - View Controller 透明背景

unity3d - 统一 3D : what is the correct way to detect that the collision has already been processed for another collision participant?