检测到碰撞时,从故事板显示新的GameOver视图控制器

时间:2015-02-09 12:07:29

标签: ios objective-c swift sprite-kit

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

这是我在检测到碰撞时调用的碰撞功能。评论是我想要做的。

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

任何人都可以帮我这样做吗?或者,如果这是通过屏幕实现游戏的错误方法,请指出正确的方向? :)

感谢。

2 个答案:

答案 0 :(得分:0)

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

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)
}

答案 1 :(得分:0)

我认为你应该创建GameOver Scene并呈现该场景,而不是执行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)
}
  • EDIT

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

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

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

  3. import SpriteKit class GameOverScene: SKScene {}

      碰撞函数中的
    1. 如下所示调用gameoverScene:
    2. let mainSKView = self.view as SKView! let gameOverScene: GameOverScene! = GameOverScene(fileNamed: "GameOverScene") mainSKView.presentScene(gameOverScene)

      告诉我它是否不起作用。对不起答案格式,我无法将整个代码插入一个块,我不知道为什么。我很蠢。