介绍
Game Center是Apple的社交游戏网络。 它使用户能够在排行榜上跟踪自己的高分,比较成就,邀请朋友玩游戏以及通过自动匹配开始多人游戏。 因此,如果您已经构建了iOS游戏并希望用户能够将其分数发布到Game Center排行榜上,那么这是适合您的教程!
Xcode项目
为了本教程的缘故,我创建了一个基本的Xcode项目,您可以从GitHub下载该项目。 我将解释在iTunes Connect上创建排行榜的所有必要步骤,以及向其提交分数的所需代码,以及在应用程序中打开排行榜的按钮。
该应用程序的故事板的外观如下:
这个项目有一个带有红色文本的UILabel ,我称之为scoreLabel
和几个UIButtons 。 红色的得分将增加10分,并将其提交到Game Center排行榜,蓝色的将打开GKGameCenterViewController并显示该排行榜。
首先要做的是在Xcode的“ 功能”选项卡中启用“ 游戏中心 ”。
然后,您必须在ViewController.swift文件的顶部导入GameKit,并将GKGameCenterControllerDelegate
协议添加到类声明中。
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能够识别默认排行榜。
当然, score
最初将为0。
LEADERBOARD_ID
是必须设置的String
,以使Game Center通过默认的排行榜标识符将分数提交到服务器。 选择所需的名称,但请记住,它必须具有Web反向语法。 这就是为什么我将此排行榜标识为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)
}
}
}
如果用户尚未从其设备上的“设置”登录Game Center,则上述方法将在连接到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分,因此,每次单击“ 添加分数并提交给GC”按钮时,您都会看到红色分数标签发生更改,并且该应用会将更新后的分数提交给GC排行榜。
现在,您需要添加一个GameKit委托方法,该方法将关闭GC控制器。
// Delegate to dismiss the GC controller
func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
gameCenterViewController.dismiss(animated: true, completion: nil)
}
在iTunes Connect上创建排行榜之前,只剩下一种编码方法,这是打开游戏中心的按钮的操作 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
。
现在我们完成了编码,但是您还不能运行该应用程序。 如果这样做,由于尚未在应用程序的iTunes Connect页面中创建自己的排行榜,因此Xcode会出现错误。
在iTunes Connect上设置游戏中心
您应该已经在iTunes Connect中使用自己的捆绑包标识符创建了iOS应用程序。 现在,从iTunes Connect仪表板输入您的应用程序,然后依次单击“ 功能”和“ 游戏中心” 。
然后,点击排行榜旁边的+图标。
在下一个屏幕上选择“ 单个排行榜 ”。
在这里,您必须输入要赋予排行榜的名称。 在下面的屏幕截图中,我仅以“ 我的排行榜名称”为例。 您可以称自己的“ 最佳成绩排行榜”或任何您想要的名字 。
在页首横幅ID字段中,粘贴我们先前在Xcode项目中创建的LEADERBOARD_ID
的字符串。
由于分数是数字,因此在“ 分数格式类型”字段中选择“ 整数 ”。 您可以为“ 提交类型”和“ 排序顺序”选择所需的选项。 将“ 分数范围(可选)”留空。
最后,单击添加语言按钮。
在弹出窗口中,您必须选择排行榜的语言。 默认值始终为英语。 再次输入排行榜的英文名称,然后选择一种分数格式 (我选择了逗号来分隔数字组)。
分数格式后缀字段是可选的; 您可以将两个字段都保留为空白或键入所需的后缀。 例如,如果您的游戏有得分点,则可以输入“ point”和“ points”为复数形式,因此Game Center控制器会将后缀添加到排行榜上显示的得分末尾,例如“ 1分”或“ 100”点”。
您还可以添加图标。 图片必须是512x512或1024x1024像素,至少72 DPI的.jpeg,.jpg或.png文件,并且在RGB颜色空间中没有透明背景。 单击选择文件以上传您的图像。
最后,点击保存 ,完成。 您可以重复上述步骤以添加更多语言-只需确保根据所选语言键入排行榜名称即可。
添加窗口后,您可以检查排行榜的详细信息。 如果一切正常,请点击保存 ,然后您将使用全新的页首横幅重定向到“功能”页面。
现在是时候在应用程序的“应用程序商店”部分中启用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。您应该看到类似以下的内容:
结论
如果您想看到功能齐全的游戏应用程序在运行中的Game Center,您可能想看看我的CodeCanyon游戏模板“ 四个点” 。 它是最小限度无休止游戏的模板,该模板可以保存最佳分数并将其提交给游戏中心。
这样的游戏模板是抢占下一个游戏的绝佳途径。 CodeCanyon拥有数百种iOS游戏模板 ,您可以使用它们来快速开始开发-让您以更快的速度构建下一个杀手级游戏!
翻译自: https://code.tutsplus.com/tutorials/game-center-and-leaderboards-for-your-ios-app--cms-27488