Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检测到冲突时,从情节提要显示新的GameOver视图控制器_Ios_Objective C_Swift_Sprite Kit - Fatal编程技术网

Ios 检测到冲突时,从情节提要显示新的GameOver视图控制器

Ios 检测到冲突时,从情节提要显示新的GameOver视图控制器,ios,objective-c,swift,sprite-kit,Ios,Objective C,Swift,Sprite Kit,我正在慢慢制作我的第一款iOS游戏&遇到了一个问题。我试图让我的游戏进入一个“游戏结束”屏幕,这是我用故事板中的视图控制器和标签制作的(还有我的另外两个视图控制器,一个用于开始屏幕,一个用于当前游戏) 这里是我的碰撞函数,当检测到碰撞时调用它。这就是我想做的 func collision(Bee:SKSpriteNode, Player:SKSpriteNode) { println("GAME OVER") println(leftOrRight) // Call game over view

我正在慢慢制作我的第一款iOS游戏&遇到了一个问题。我试图让我的游戏进入一个“游戏结束”屏幕,这是我用故事板中的视图控制器和标签制作的(还有我的另外两个视图控制器,一个用于开始屏幕,一个用于当前游戏)

这里是我的碰撞函数,当检测到碰撞时调用它。这就是我想做的

func collision(Bee:SKSpriteNode, Player:SKSpriteNode) {
println("GAME OVER")
println(leftOrRight)
// Call game over view controller from storyboard
}
谁能帮我做这个?或者,如果这是在屏幕上实现游戏的错误方法,请为我指出正确的方向:)


谢谢。

在游戏场景中创建一个名为
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)
}
GameViewController
GameOverViewController
创建具有唯一名称的序列。然后进入
碰撞
功能

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)
}
  • 编辑
您可以通过以下步骤测试此解决方案的工作:

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

  • 创建一个名为GameOverScene的SKScene子类,再次让该类为空,仅用于测试,如下所示

  • 导入SpriteKit
    类游戏场景:SKScene{}

  • 在Collision函数中,如下调用gameoverScene:
  • 让mainSKView=self.view作为SKView!
    让gameOverScene:gameOverScene!=GameOverScene(文件名为:“GameOverScene”)
    mainSKView.presentScene(游戏场景)


    如果它不起作用,告诉我。很抱歉回答格式不好,我不能在一个块中插入我的全部代码,我不知道为什么。我真傻。

    你从gameviewcontroller切换到gameovercontroller了吗?不,我不知道这到底是什么意思。我在网上寻找了一个指南,但没有成功。你是如何从开始屏幕移动到gameviewcontroller的?阅读两个关于使用故事板的教程这种解决方案是我的意图,也是我以前尝试过的,但有了这段代码,我得到了一个“使用未声明类型”的GameOverScene“.我怎样才能解决这个问题?你从哪里得到这个错误的?”?类中的GameOverScene或函数中的冲突(…)。您必须创建一个SKScene子类(类GameOverScene:SKScene)并绘制相应的.sks文件。在collision函数中,您可以通过unarchiveFromFile函数创建GameOverScene的实例(这也是您从ViewController创建和调用GameSecene的方式)。我刚刚在main.storyboard中创建了一个新的View Controller。我想把它链接到我制作的视图控制器上。我已经编辑了我的答案,检查一下,告诉我它是否对你有用谢谢你的帮助,这很有意义,但它给了我一个错误'2015-02-10 09:13:55.426 TestGame[777:7326044]-[SKEmitterNode\u didMoveToView:]:发送到实例0x7ff2c9306f80 2015-02-10 09:13:55.428 TestGame[777:7326044]***由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:'-[SKEmitterNode_didMoveToView:]:发送到实例0x7ff2c9306f80的未识别选择器'