检测到碰撞时从情节提要中显示一个新的 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)
}
使用从 GameViewController
到 GameOverViewController
的唯一名称创建一个 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)
}
- 编辑
您可以按照以下步骤测试此解决方案的工作情况:
创建一个SpriteKit场景文件(.sks文件),只是为了测试,所以这次你不需要在那个场景中绘制任何东西
创建一个名为GameOverScene的SKScene的子class,再次让class为空,只是为了测试,像这样
import SpriteKit
class GameOverScene: SKScene {}
- 在 Collision 函数中像这样调用 gameoverScene:
let mainSKView = self.view as SKView!
let gameOverScene: GameOverScene! = GameOverScene(fileNamed: "GameOverScene")
mainSKView.presentScene(gameOverScene)
如果它不起作用请告诉我。抱歉,答案格式不正确,我无法将整个代码插入一个块中,我也不知道为什么。我好笨
我正在慢慢制作我的第一款 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)
}
使用从 GameViewController
到 GameOverViewController
的唯一名称创建一个 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)
}
- 编辑
您可以按照以下步骤测试此解决方案的工作情况:
创建一个SpriteKit场景文件(.sks文件),只是为了测试,所以这次你不需要在那个场景中绘制任何东西
创建一个名为GameOverScene的SKScene的子class,再次让class为空,只是为了测试,像这样
import SpriteKit
class GameOverScene: SKScene {}
- 在 Collision 函数中像这样调用 gameoverScene:
let mainSKView = self.view as SKView!
let gameOverScene: GameOverScene! = GameOverScene(fileNamed: "GameOverScene")
mainSKView.presentScene(gameOverScene)
如果它不起作用请告诉我。抱歉,答案格式不正确,我无法将整个代码插入一个块中,我也不知道为什么。我好笨