好的 - 我确定这是重复的,而且 Whirlwind 或 KnightOfDragons 已经发布了一个解决方案,但我找不到它。
我正在使用 Sprite-Kit 在 Swift 中编写 Space Invader 的克隆。我遇到的问题是,当入侵者炸弹击中我的船时,代码有时会记录 2 或 3 次碰撞,从而立即结束游戏。这是处理炸弹/船舶碰撞的“didBeginContact”部分:
case category.bomb.rawValue | category.ship.rawValue:
print("Bomb hit ship!")
let bomb = contact.bodyA.categoryBitMask == category.bomb.rawValue ? contact.bodyA.node : contact.bodyB.node
bomb?.physicsBody?.contactTestBitMask = 0 // Seems to prevent multiple contacts with same bomb
ship.physicsBody!.contactTestBitMask = 0 // We'll reset this after the death animation
bomb?.removeAllActions()
ship.removeAllActions()
bomb?.removeFromParent()
ships -= 1
if ships == 0 { endScene(won: false, withMessage: "A bomb got you!") }
Run Code Online (Sandbox Code Playgroud)
当我运行游戏时,我看到:
Bomb …Run Code Online (Sandbox Code Playgroud)