我正在慢慢制作我的第一款iOS游戏&遇到了一个问题。我试图让我的游戏进入"游戏结束"我使用视图控制器制作的屏幕&故事板中的标签(以及我的其他两个视图控制器,一个用于开始屏幕,一个用于当前游戏)和一个用于当前游戏。
这是我在检测到碰撞时调用的碰撞功能。评论是我想要做的。
func collision(Bee:SKSpriteNode, Player:SKSpriteNode) {
println("GAME OVER")
println(leftOrRight)
// Call game over view controller from storyboard
}
任何人都可以帮我这样做吗?或者,如果这是通过屏幕实现游戏的错误方法,请指出正确的方向? :)
感谢。
答案 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)
}
使用GameViewController
到GameOverViewController
的唯一名称创建一个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)
}
您可以按照以下步骤测试此解决方案的工作:
创建一个SpriteKit场景文件(.sks文件),只是为了测试,这次你不需要在那个场景中绘制任何东西
创建一个名为GameOverScene的SKScene子类,再次让该类为空,只是为了测试,就像这样
import SpriteKit
class GameOverScene: SKScene {}
let mainSKView = self.view as SKView!
let gameOverScene: GameOverScene! = GameOverScene(fileNamed: "GameOverScene")
mainSKView.presentScene(gameOverScene)
告诉我它是否不起作用。对不起答案格式,我无法将整个代码插入一个块,我不知道为什么。我很蠢。