Ios 检测到冲突时,从情节提要显示新的GameOver视图控制器
我正在慢慢制作我的第一款iOS游戏&遇到了一个问题。我试图让我的游戏进入一个“游戏结束”屏幕,这是我用故事板中的视图控制器和标签制作的(还有我的另外两个视图控制器,一个用于开始屏幕,一个用于当前游戏) 这里是我的碰撞函数,当检测到碰撞时调用它。这就是我想做的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
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的未识别选择器'