我在我的应用程序中设置了几个完美的冲突,但是我无法在同一个节点上运行最后两个冲突。
以下是我所拥有的:
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与外星人接触。但是,飞船没有与外星人接触。
如果我从alien categoryBitMask中删除“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 - Swift SpriteKit通过3个节点设置碰撞/接触位掩码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43018231/