您的游戏中应该只有一个 GameViewController。 SKScene 是游戏在 to 之间转换的场景。
例如,主菜单屏幕?那是一个SKScene。主要玩法?那是一个SKScene。游戏结束画面?那是一个 SKScene。
GameViewController 初始化了游戏将在其中维护的整个视图,因此视图。 SKScene 只是放置在视图顶部的场景。您应该查看使用 SKScenes 的教程。
这是使游戏中心从最新的 Swift 2.2 开始工作的方法。
将此函数添加到 GameViewController 类中的任何位置,然后在 super.viewDidLoad() 之后立即调用它。
func authenticateLocalPlayer() {
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {(viewController, error) -> Void in
if (viewController != nil) {
self.presentViewController(viewController!, animated: true, completion: nil)
}
else {
print((GKLocalPlayer.localPlayer().authenticated))
}
}
}
在您的 SKScene 类文件中添加以下函数。不要忘记导入 GameKit。只要您想显示排行榜,只需调用 showLeader()。
func showLeader() {
let viewControllerVar = self.view?.window?.rootViewController
let gKGCViewController = GKGameCenterViewController()
gKGCViewController.gameCenterDelegate = self
viewControllerVar?.presentViewController(gKGCViewController, animated: true, completion: nil)
}
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) {
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}
这是我如何将分数保存到游戏中心的示例。
func saveHighscore(gameScore: Int) {
print("Player has been authenticated.")
if GKLocalPlayer.localPlayer().authenticated {
let scoreReporter = GKScore(leaderboardIdentifier: "YOUR_LEADERBOARD_ID")
scoreReporter.value = Int64(gameScore)
let scoreArray: [GKScore] = [scoreReporter]
GKScore.reportScores(scoreArray, withCompletionHandler: {error -> Void in
if error != nil {
print("An error has occured: \(error)")
}
})
}
}