// 作者: 卞翔
// 联系QQ: 1023537528
// iOS技术交流群: 160603792
// GitHub:https://github.com/bianxiang
// CSDN:http://blog.csdn.net/bx_jobs
在App Store中,最流行的应用类型非游戏莫属。几乎所有的iOS用户都下载并玩过游戏。有各种样的游戏玩家,有人为之痴狂,有人只是偶尔玩玩。不过无论是哪种玩家,都会注重游戏的趣味性。在游戏中能够实现目标,或者和其他玩家比赛,无疑是趣味性的一种重要实现手段。而在iOS中(和MacOS)中,伟大的苹果提供了Game Center,并提供了GameKit框架来让Game Center集成变得简单。
简单而言, Game Center提供了以下机制:
要让游戏支持Game Center,有三个步骤需要做:
有了应用记录,你就可以配置Game Center了。
登录iTunesConnect,在My Apps中选中你的应用,点击"Features"栏,在左边的导航中找到"Game Center",如下图所示:
在页面中找到"Leaderboards (0) ",0表示目前有0个排行榜。
点击后面的"+",出现下面的界面:
这里让你选择是创建单一排行榜,还是合并的排行榜。我们选择单一排行榜(Single Leatherboard)
然后需要填一些基本信息:
填完基本信息后,我们需要添加至少一个排行榜的本地语言(Leaderboard Localization):
在 xCode中,找到target,选中 “Capabilities”标签栏,找到Game Center,打开开关:
XCode会将GameKit添加到你的工程。
有了 Game Center后,要写的代码不多。我们只需要用代码做以下几件事:
显示排行榜;
简单起见,下面所有的代码都放在GameScene中。
以下分开来说。
因为Game Center所有的操作都需要本地玩家(local player),所以需要在启动时验证用户。
验证用户的逻辑其实很简单。就是看用户是否已经在本机登录过,如果没有,则弹出Game Center的登录界面:
func authenticateLocalPlayer(){
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {(viewController, error) -> Void in
if (viewController != nil) {
let vc: UIViewController = self.view!.window!.rootViewController!
vc.presentViewController(viewController!, animated: true, completion: nil)
}
else {
print((GKLocalPlayer.localPlayer().authenticated))
}
}
}
有了这段代码,只需要在GameScene
的didMoveToView
中调用一下上面这个方法就好了。
实现如下:
func reportScore(score:Int) {
//check if user is alredy logged in game center
if GKLocalPlayer.localPlayer().authenticated {
let scoreReporter = GKScore(leaderboardIdentifier: "grp.TopStrategist")
scoreReporter.value = Int64(score)
let scoreArray: [GKScore] = [scoreReporter]
GKScore.reportScores(scoreArray, withCompletionHandler: {(error : NSError?) -> Void in
if error != nil {
print("error:%@", error)
}
})
}
}
显示排行榜一般需要:
在界面上放一个按钮,当按钮响应时调用下面这个函数:
//shows leaderboard screen
func showLeader() {
if stateMachine.currentState is GameSceneActiveState && !paused {
togglePause()
}
let vc = self.view?.window?.rootViewController
let gc = GKGameCenterViewController()
gc.gameCenterDelegate = self
vc?.presentViewController(gc, animated: true, completion: nil)
}
上面的代码会弹出排行榜。
要响应退出排行榜继续游戏,需要GameScene实现 GKGameCenterControllerDelegate
class GameScene: GKGameCenterControllerDelegate
这个GKGameCenterControllerDelegate只有一个方法需要我们实现:
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController)
{
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
if stateMachine.currentState is GameSceneActiveState && paused {
togglePause()
}
}
写到这里,Game Center的集成就完成了。用了 Game Cetner之后,是不是有让你的游戏如虎添翼的感觉?
如果本文对你有用,不妨考虑对我打赏 :)