【发布时间】:2020-08-15 23:02:35
【问题描述】:
我正在学习编码并学习“颜色切换”教程。我试图加强我的知识,并创造了 2 个开关和落球。
一旦球接触到开关,我就会遇到问题。我有两个开关的开始联系方法,如果错误,调用 gameOver 方法。但是当两个开关都出错时,它们都会同时调用 gameOver 方法,导致我的游戏崩溃。我该如何解决这个问题?任何帮助将不胜感激,谢谢!
当前代码:
extension GameScene: SKPhysicsContactDelegate {
func didBegin(_ contact: SKPhysicsContact) {
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
if contactMask == PhysicsCategories.ballCategory | PhysicsCategories.switchCategory {
if let ball = contact.bodyA.node?.name == "Ball" ? contact.bodyA.node as? SKSpriteNode : contact.bodyB.node as? SKSpriteNode {
if currentColourIndex == switchState.rawValue {
score += 1
updateScoreLabel()
ball.run(SKAction.fadeOut(withDuration: 0.15)) {
ball.removeFromParent()
self.spawnBall()
}
} else {
gameOver()
}
}
}
let contactMask2 = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
if contactMask2 == PhysicsCategories2.ballCategory2 | PhysicsCategories2.switchCategory2 {
if let ball2 = contact.bodyA.node?.name == "Ball2" ? contact.bodyA.node as? SKSpriteNode : contact.bodyB.node as? SKSpriteNode {
if currentColourIndex2 == switchState2.rawValue {
score += 1
updateScoreLabel()
ball2.run(SKAction.fadeOut(withDuration: 0.15)) {
ball2.removeFromParent()
self.spawnBall2()
}
} else {
gameOver()
}
}
}
}
}
func gameOver() {
UserDefaults.standard.set(score, forKey: "RecentScore")
if score > UserDefaults.standard.integer(forKey: "Highscore") {
UserDefaults.standard.set(score, forKey: "Highscore")
}
let menuScene = MenuScene(size: view!.bounds.size)
view!.presentScene(menuScene)
}
【问题讨论】:
标签: swift physics contacts simultaneous