检测到碰撞时从情节提要中显示一个新的 GameOver 视图控制器

Display a new GameOver view controller from storyboard when collision is detected

我正在慢慢制作我的第一款 iOS 游戏,并且 运行 遇到了问题。我试图让我的游戏进入 "game over" 屏幕,这是我使用故事板中的视图控制器和标签制作的(以及我的其他两个视图控制器,一个用于开始屏幕,一个用于当前游戏) .

这是我在检测到碰撞时调用的碰撞函数。评论是我想做的。

func collision(Bee:SKSpriteNode, Player:SKSpriteNode) {
println("GAME OVER")
println(leftOrRight)
// Call game over view controller from storyboard
}

谁能帮我做这个?或者,如果这是实现游戏结束屏幕的错误方法,请指出正确的方向? :)

谢谢。

在名为 gameViewController 的 GameScene 中创建一个弱 属性。

weak var gameViewController : GameViewController? = nil

然后在 GameViewController viewDidLoad 中呈现场景之前分配 属性。

override func viewDidLoad() {
    super.viewDidLoad()

    let scene = GameScene(size:CGSizeMake(self.view.frame.width, self.view.frame.height))

    scene.gameViewController = self
    skView.presentScene(scene)
}

使用从 GameViewControllerGameOverViewController 的唯一名称创建一个 segue。然后在 collision 函数中。

func collision(Bee:SKSpriteNode, Player:SKSpriteNode) {
    println("GAME OVER")
    println(leftOrRight)
    self.gameViewController?.performSegueWithIdentifier("goToGameOverController",
        sender: self)
}

我认为您应该创建 GameOver 场景并呈现该场景,而不是执行 segue 以显示另一个视图控制器。

func collision(Bee:SKSpriteNode, Player:SKSpriteNode) {
println("GAME OVER")
println(leftOrRight)

//create GameOverScene here, then present it
let mainSKView = self.view as SKView!
let gameOverScene: GameOverScene = GameOverScene()

mainSKView.presentScene(gameOverScene)
}
  • 编辑

您可以按照以下步骤测试此解决方案的工作情况:

  1. 创建一个SpriteKit场景文件(.sks文件),只是为了测试,所以这次你不需要在那个场景中绘制任何东西

  2. 创建一个名为GameOverScene的SKScene的子class,再次让class为空,只是为了测试,像这样

import SpriteKit class GameOverScene: SKScene {}

  1. 在 Collision 函数中像这样调用 gameoverScene:

let mainSKView = self.view as SKView! let gameOverScene: GameOverScene! = GameOverScene(fileNamed: "GameOverScene") mainSKView.presentScene(gameOverScene)

如果它不起作用请告诉我。抱歉,答案格式不正确,我无法将整个代码插入一个块中,我也不知道为什么。我好笨