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