tags:開發(fā)隨筆
Game Center概述
在App Store中,最流行的應(yīng)用類型非游戲莫屬恰梢。幾乎所有的iOS用戶都下載并玩過游戲般卑。有各種樣的游戲玩家,有人為之癡狂绷雏,有人只是偶爾玩玩头滔。不過無論是哪種玩家怖亭,都會注重游戲的趣味性。在游戲中能夠?qū)崿F(xiàn)目標(biāo)坤检,或者和其他玩家比賽兴猩,無疑是趣味性的一種重要實(shí)現(xiàn)手段。而在iOS中(和MacOS)中早歇,偉大的蘋果提供了Game Center倾芝,并提供了GameKit框架來讓Game Center集成變得簡單。
簡單而言箭跳, Game Center提供了以下機(jī)制:
- 用戶管理和驗(yàn)證晨另。你的游戲不用再考慮用戶注冊,登錄谱姓,密碼找回借尿,存儲分?jǐn)?shù)等繁瑣的功能實(shí)現(xiàn)。Game Center為你的游戲提供了一個(gè)本地玩家(local player)屉来,這個(gè)對象為所有的游戲共享路翻,你只需要調(diào)用即可;
- 排行榜茄靠。你只需要在 iTunesConnect中指定排行方式就可以輕松擁有一個(gè)或者多個(gè)排行榜;
- 記錄成就茂契。你的游戲需要定義里程碑,調(diào)用Game Center就可以保存進(jìn)度嘹黔;
- 挑戰(zhàn)账嚎。Game Center提供了讓玩家挑戰(zhàn)其他玩家的機(jī)制。
實(shí)戰(zhàn)
要讓游戲支持Game Center儡蔓,有三個(gè)步驟需要做:
- 在iTunesConnect中配置郭蕉;
- XCode工程配置;
- 代碼支持喂江;
下面分開來講召锈。
為了簡單起見,我們假設(shè): - 你的游戲功能已經(jīng)基本開發(fā)完畢获询,本文只專注于Game Center集成這一部分涨岁;
- 簡單起見,本文沒有涉及到玩家挑戰(zhàn)等功能吉嚣;
- 開發(fā)用的編程語言為Swfit(如果用objective-C也類似)梢薪;
在iTunesConnect中配置
如果你還沒有在iTunesConnect中添加應(yīng)用記錄的話,你需要添加一個(gè)尝哆”玻可以查看這里 了解如何操作。
有了應(yīng)用記錄,你就可以配置Game Center了琐馆。
登錄iTunesConnect规阀,在My Apps中選中你的應(yīng)用,點(diǎn)擊"Features"欄瘦麸,在左邊的導(dǎo)航中找到"Game Center",如下圖所示:
在頁面中找到"Leaderboards (0) "谁撼,0表示目前有0個(gè)排行榜。
點(diǎn)擊后面的"+"滋饲,出現(xiàn)下面的界面:
這里讓你選擇是創(chuàng)建單一排行榜厉碟,還是合并的排行榜。我們選擇單一排行榜(Single Leatherboard)
然后需要填一些基本信息:
- "Leaderboard Reference Name"了赌,排行榜名稱墨榄;
- "Leaderboard ID"玄糟,排行榜ID勿她,后面程序需要這個(gè);
- Score Format Type,分?jǐn)?shù)的格式阵翎,整數(shù)還是帶小數(shù)點(diǎn)的分?jǐn)?shù)逢并;
填完基本信息后,我們需要添加至少一個(gè)排行榜的本地語言(Leaderboard Localization):
XCode工程配置
在 xCode中郭卫,找到target砍聊,選中 “Capabilities”標(biāo)簽欄,找到Game Center贰军,打開開關(guān):
XCode會將GameKit添加到你的工程玻蝌。
代碼支持
有了 Game Center后,要寫的代碼不多词疼。我們只需要用代碼做以下幾件事:
- 游戲啟動(dòng)時(shí)驗(yàn)證用戶俯树;
- 游戲過程中提交用戶得分;
- 顯示排行榜;
簡單起見贰盗,下面所有的代碼都放在GameScene中许饿。
以下分開來說。
游戲啟動(dòng)時(shí)驗(yàn)證用戶
因?yàn)镚ame Center所有的操作都需要本地玩家(local player)舵盈,所以需要在啟動(dòng)時(shí)驗(yàn)證用戶陋率。
驗(yàn)證用戶的邏輯其實(shí)很簡單。就是看用戶是否已經(jīng)在本機(jī)登錄過秽晚,如果沒有瓦糟,則彈出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
中調(diào)用一下上面這個(gè)方法就好了赴蝇。
游戲過程中提交用戶得分
實(shí)現(xiàn)如下:
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)
}
})
}
}
顯示排行榜
顯示排行榜一般需要:
- 在用戶點(diǎn)擊顯示排行榜時(shí)菩浙,暫停當(dāng)前游戲;
- 在用戶退出排行榜后,繼續(xù)當(dāng)前游戲芍耘;
在界面上放一個(gè)按鈕址遇,當(dāng)按鈕響應(yīng)時(shí)調(diào)用下面這個(gè)函數(shù):
//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)
}
上面的代碼會彈出排行榜。
要響應(yīng)退出排行榜繼續(xù)游戲斋竞,需要GameScene實(shí)現(xiàn) GKGameCenterControllerDelegate
class GameScene: GKGameCenterControllerDelegate
這個(gè)GKGameCenterControllerDelegate只有一個(gè)方法需要我們實(shí)現(xiàn):
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController)
{
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
if stateMachine.currentState is GameSceneActiveState && paused {
togglePause()
}
}
寫到這里倔约,Game Center的集成就完成了。用了 Game Cetner之后坝初,是不是有讓你的游戲如虎添翼的感覺浸剩?
如果本文對你有用,不妨考慮對我打賞 :)