Chinese (Simplified) (中文(简体)) translation by Fuhuan (you can also view the original English article)
简介
游戏中心是苹果的社交游戏网络。它能让用户在排行榜上跟踪他人的得分,进行PK,还能邀请好友进入游戏,并通过匹配来启动多人游戏。 所以,如果你已经构建了一个IOS游戏,并喜欢用户能够将他们的分数分享到排行榜。
有关应用程序和游戏中心的的更多信息,请访问苹果的相关界面。
Xcode项目
为了本教程,我制作了一个可以从GITHUB下周的基本Xcode项目。我将介绍在苹果中心制作排行榜的所有步骤,以及相关代码和API接口。
以下是应用程序的外观:



这个项目有一个名为scoreLabel和一些UIButton的红色文本的UILabel。红色的将加10分,并提交给一个游戏中心排行榜,蓝色的将打开GKGameCenterViewController并显示排行榜。
首先要做的是在Xcode中的Capabilities选项卡中启用Game Center。



然后,你必须在ViewController.swift文件的顶部导入GameKit,并将
import GameKit class ViewController: UIViewController, GKGameCenterControllerDelegate {
我们现在添加一些变量。你可以将这段代码粘贴到你的ViewController类中:
/* Variables */ var gcEnabled = Bool() // Check if the user has Game Center enabled var gcDefaultLeaderBoard = String() // Check the default leaderboardID var score = 0 // IMPORTANT: replace the red string below with your own Leaderboard ID (the one you've set in iTunes Connect) let LEADERBOARD_ID = "com.score.mygamename"
第一个变量表示你是否启用了Game Center,第二个变量将在稍后由本地玩家身份验证代码使用,以使GameKit能够识别默认的排行榜。
当然啦,游戏分数一开始是0,也必须是0。
LEADERBOARD_ID是一个必须设置的字符串,以使Game Center通过默认排行榜标识符将你的分数提交给服务器。选择你想要的名字,但要记住它必须有一个网页反转的语法。 这就是为什么我将这个排行榜标识为com.score.mygamename,其中mygamename应该用小写字母替换为你的应用程序的名称,并且没有空格。
在你的应用程序的iTunes Connect页面中启用Game Center之前,让我们完成基本代码。将这一行添加到viewDidLoad()中:
// Call the GC authentication controller authenticateLocalPlayer()
并在viewDidLoad()下面添加以下函数:
// MARK: - AUTHENTICATE LOCAL PLAYER func authenticateLocalPlayer() { let localPlayer: GKLocalPlayer = GKLocalPlayer.localPlayer() localPlayer.authenticateHandler = {(ViewController, error) -> Void in if((ViewController) != nil) { // 1. Show login if player is not logged in self.present(ViewController!, animated: true, completion: nil) } else if (localPlayer.isAuthenticated) { // 2. Player is already authenticated & logged in, load game center self.gcEnabled = true // Get the default leaderboard ID localPlayer.loadDefaultLeaderboardIdentifier(completionHandler: { (leaderboardIdentifer, error) in if error != nil { print(error) } else { self.gcDefaultLeaderBoard = leaderboardIdentifer! } }) } else { // 3. Game center is not enabled on the users device self.gcEnabled = false print("Local player could not be authenticated!") print(error) } } }
如果用户没有从设备登录到游戏中心,将在连接到GC服务器后立即显示Game Center登录界面。一旦玩家登录后,应用程序会获取默认的排行榜ID。
在下一个方法中,我们将抓取你之前创建的LEADERBOARD_ID字符串,并将其作为Game Center服务器的默认排行榜ID传递。
// MARK: - ADD 10 POINTS TO THE SCORE AND SUBMIT THE UPDATED SCORE TO GAME CENTER @IBAction func addScoreAndSubmitToGC(_ sender: AnyObject) { // Add 10 points to current score score += 10 scoreLabel.text = "\(score)" // Submit score to GC leaderboard let bestScoreInt = GKScore(leaderboardIdentifier: LEADERBOARD_ID) bestScoreInt.value = Int64(score) GKScore.report([bestScoreInt]) { (error) in if error != nil { print(error!.localizedDescription) } else { print("Best Score submitted to your Leaderboard!") } } }
上面的代码也为当前分数增加了10分,所以每次点击添加分数和提交到Game Center按钮,就会看到红色的分数标签发生变化,应用程序会将更新后的分数提交给Game Center排行榜。
现在需要添加一个GameKit来关闭GC控制器。
// Delegate to dismiss the GC controller func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) { gameCenterViewController.dismiss(animated: true, completion: nil) }
在iTunes Connect上制作排行榜之前,只有一种方法需要编码,那就是打开Game Center ViewController的按钮的动作。
// MARK: - OPEN GAME CENTER LEADERBOARD @IBAction func checkGCLeaderboard(_ sender: AnyObject) { let gcVC = GKGameCenterViewController() gcVC.gameCenterDelegate = self gcVC.viewState = .leaderboards gcVC.leaderboardIdentifier = LEADERBOARD_ID present(gcVC, animated: true, completion: nil) }
正如你在上面看到的,这段代码实例化了GC控制器,把它的委托分配给那个控制器,设置控制器的视图状态显示排行榜,并且在呈现控制器之前传递你的LEADERBOARD_ID。
现在我们已经完成了编程,但是还不能运行应用程序。如果你这样做,你会从Xcode中得到一个错误的反馈,因为还没有在应用程序的iTunes Connect页面中制作出排行榜。
在iTunes Connect上设置游戏中心
你应该已经使用自己的Bundle标识符在iTunes Connect中创建了一个iOS应用程序。现在从iTunes Connect仪表板输入你的应用程序,然后点击功能,然后再是游戏中心。
然后点击排行榜旁边的添加图标。



在下一个界面里选择排行榜。



在这里你必须输入想要的排行榜的名字。在下面的屏幕截图中,我仅以“排行榜名称”为例。你可以随意取名的啦。
在排行榜ID字段中,粘贴我们之前在Xcode项目中创建的LEADERBOARD_ID的字符串。
由于分数是一个数字,因此在分数格式类型字段中选择整数。你可以选择你想要的提交类型和排序顺序的选项。将分数范围(可选)留空。
最后,点击添加语言按钮。



在弹出窗口中,你必须选择好排行榜的语言。默认英文。再次输入排行榜的英文名称,然后选择一个分数格式(我选择逗号分隔数字组)。
该分数格式后缀字段是可选的; 你可以将这两个字段留空或键入所需的后缀。如果你的游戏有得分,你可以输入“point”和“points”作为复数,所以Game Center控制器会把这个后缀加到排行榜上显示的分数的末尾,比如“1分”或“100分”。
你也可以添加一个图标。图片必须是.jpeg,.jpg或.png文件,它是512x512或1024x1024像素,至少72 DPI,并且在没有透明背景的RGB色彩空间中。点击文件上传并选择上传你的图片。
最后点击保存,就完成了。你可以重复上述步骤来添加更多语言,只要确保按照所选语言键入排行榜名称即可。



一旦你添加了一个窗口,你需要检查排行榜的细节。如果一切正常,请点击保存,然后重定向到功能页面,并展现全新的排行榜。






现在是时候在你的应用的App Store部分中启用Game Center。点击App Store并准备提交。



向下滚动,直到找到旁边有一个开关的Game Center。启用它,它会变成绿色。然后点击排行榜旁边的+号,从列表中选择你的排行榜,然后点击完成。



点击窗口右上角的保存后,你将完成在iTunes Connect上设置Game Center的行为。



现在可以回头看看Xcode项目,并在真实的设备上和iOS模拟器上运行应用程序。如果你还没有登录到Game Center,登录控制器将显示。它看起来像这样:



使用你的账号密码登录,然后测试应用程序!
在我们的addScoreAndSubmitToGC()方法中,我们添加了下面的print()调用:
print("Best Score submitted to your Leaderboard!")
如果你点击红色按钮,scoreLabel将显示“10”,Xcode控制台将提交给排行榜的最佳分数!



点击红色按钮三次,然后点击蓝色打开你的排行榜,并检查提交的分数是40。你应该看到是:



总结
如果你想看到游戏中心与一个功能齐全的游戏应用,你可能需要看看看看我的CodeCanyon游戏模板。这是一个较合适的游戏模板,保存分数后提交给游戏中心。



像这样的游戏模板是快速开发的好方法。CodeCanyon拥有数百种iOS游戏模板,你可以使用这些模板来快速开发 - 让你以更快的速度制作出下一个游戏!
感谢你的阅读,下次见!请查看我们的其他一些关于Swift和iOS应用程序开发的教程。
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly