iOS应用的游戏中心和排行榜

介绍

Game Center是Apple的社交游戏网络。 它使用户能够在排行榜上跟踪自己的高分,比较成就,邀请朋友玩游戏以及通过自动匹配开始多人游戏。 因此,如果您已经构建了iOS游戏并希望用户能够将其分数发布到Game Center排行榜上,那么这是适合您的教程!

有关应用程序和Game Center的更多信息,请访问其Apple Developer页面

Xcode项目

为了本教程的缘故,我创建了一个基本的Xcode项目,您可以从GitHub下载该项目。 我将解释在iTunes Connect上创建排行榜的所有必要步骤,以及向其提交分数的所需代码,以及在应用程序中打开排行榜的按钮。

该应用程序的故事板的外观如下:

演示Xcode项目

这个项目有一个带有红色文本的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仪表板输入您的应用程序,然后依次单击“ 功能”和“ 游戏中心”

然后,点击排行榜旁边的+图标。

iTunes Connect上的“应用程序功能”页面

在下一个屏幕上选择“ 单个排行榜 ”。

添加排行榜

在这里,您必须输入要赋予排行榜的名称。 在下面的屏幕截图中,我仅以“ 我的排行榜名称”为例。 您可以称自己的“ 最佳成绩排行榜”或任何您想要的名字

页首横幅ID字段中,粘贴我们先前在Xcode项目中创建的LEADERBOARD_ID的字符串。

由于分数是数字,因此在“ 分数格式类型”字段中选择“ 整数 ”。 您可以为“ 提交类型”和“ 排序顺序”选择所需的选项。 将“ 分数范围(可选)”留空。

最后,单击添加语言按钮。

设置排行榜详细信息

在弹出窗口中,您必须选择排行榜的语言。 默认值始终为英语。 再次输入排行榜的英文名称,然后选择一种分数格式 (我选择了逗号来分隔数字组)。

分数格式后缀字段是可选的; 您可以将两个字段都保留为空白或键入所需的后缀。 例如,如果您的游戏有得分点,则可以输入“ point”和“ points”为复数形式,因此Game Center控制器会将后缀添加到排行榜上显示的得分末尾,例如“ 1分”或“ 100”点”。

您还可以添加图标。 图片必须是512x512或1024x1024像素,至少72 DPI的.jpeg,.jpg或.png文件,并且在RGB颜色空间中没有透明背景。 单击选择文件以上传您的图像。

最后,点击保存 ,完成。 您可以重复上述步骤以添加更多语言-只需确保根据所选语言键入排行榜名称即可。

添加排行榜语言

添加窗口后,您可以检查排行榜的详细信息。 如果一切正常,请点击保存 ,然后您将使用全新的页首横幅重定向到“功能”页面。

为新的页首横幅添加了语言
功能页面

现在是时候在应用程序的“应用程序商店”部分中启用Game Center了。 点击App Store准备提交

App Store部分

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


单击窗口右上角的“ 保存” ,您将在iTunes Connect上完成Game Center的设置。

使用Game Centers排行榜保存您的应用

现在,您可以返回到Xcode项目,并在真实设备甚至iOS模拟器上运行该应用程序。 如果您尚未登录Game Center,则将显示“登录”控制器。 看起来像这样:

游戏中心唱歌画面

使用您的凭据登录,即可开始测试该应用程序!

在我们的addScoreAndSubmitToGC()方法中,添加了以下print()调用:

print("Best Score submitted to your Leaderboard!")

因此,如果您点击红色按钮, scoreLabel将显示“ 10”,并且Xcode控制台将打印提交给排行榜的最佳分数!

分数已更新并提交到您的排行榜

再点击红色按钮三遍,然后点击蓝色按钮以打开排行榜,并检查提交的分数是否为40。您应该看到类似以下的内容:

排行榜的GC控制器

结论

如果您想看到功能齐全的游戏应用程序在运行中的Game Center,您可能想看看我的CodeCanyon游戏模板“ 四个点” 。 它是最小限度无休止游戏的模板,该模板可以保存最佳分数并将其提交给游戏中心。

这样的游戏模板是抢占下一个游戏的绝佳途径。 CodeCanyon拥有数百种iOS游戏模板 ,您可以使用它们来快速开始开发-让您以更快的速度构建下一个杀手级游戏!

翻译自: https://code.tutsplus.com/tutorials/game-center-and-leaderboards-for-your-ios-app--cms-27488

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值