GameCenter 排行榜
先决条件:
- Apple 开发者帐户
- 使用 iTunesConnect 设置 GameCenter 排行榜
设置 GameCenter 排行榜:
- 登录 iTunesConnect
- 转到我的应用程序。为你的项目创建一个应用程序,然后转到功能。
- 点击游戏中心
- 单击排行榜旁边的加号。
- 为排行榜类型选择单个排行榜。
- 创建排行榜参考名称供你参考。
- 为你的应用创建排行榜 ID ,以便在报告分数时参考。
- 将分数格式设置为 Integer
- 分数提交将是最佳分数
- 单击添加语言并填写条目。
复制你制作的 LeaderboardID
,然后转到 Xcode。
使用 Xcode
我们将使用 4 种功能。
-
导入框架并设置协议
-
检查用户是否已登录 GameCenter
-
将分数报告给 GameCenter
-
查看排行榜
-
导入 GameKit
import GameKit
协议GKGameCenterControllerDelegate
-
现在我们要检查用户是否已登录 GameCenter
func authenticateLocalPlayer() {
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = { (viewController, error) -> Void in
if viewController != nil {
//If the user is not signed in to GameCenter, we make them sign in
let vc:UIViewController = self.view!.window!.rootViewController!
vc.presentViewController(viewController!, animated: true, completion: nil)
} else {
//Do something here if you want
}
}
}
- 现在用户正在使用该应用程序,突然用户有了新的高分,我们通过调用以下功能报告高分。
下面的函数包括 2 个参数。
Identifier
,它被定义为一个字符串,用于输入你在 iTunesConnect 中创建的 leaderboardID。
score
,定义为 Int,它将是提交给 iTunesConnect 的用户分数
func saveHighScore(identifier:String, score:Int) {
if GKLocalPlayer.localPlayer().authenticated {
let scoreReporter = GKScore(leaderboardIdentifier: identifier)
scoreReporter.value = Int64(score)
let scoreArray:[GKScore] = [scoreReporter]
GKScore.reportScores(scoreArray, withCompletionHandler: {
error -> Void in
if error != nil {
print("Error")
} else {
}
})
}
}
- 现在,如果用户想要查看排行榜,请调用以下功能
//This function will show GameCenter leaderboards and Achievements if you call this function.
func showGameCenter() {
let gameCenterViewController = GKGameCenterViewController()
gameCenterViewController.gameCenterDelegate = self
let vc:UIViewController = self.view!.window!.rootViewController!
vc.presentViewController(gameCenterViewController, animated: true, completion:nil)
}
//This function closes gameCenter after showing.
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) {
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
self.gameCenterAchievements.removeAll()
}