如何用swift在游戏中心报告高分

Posted

技术标签:

【中文标题】如何用swift在游戏中心报告高分【英文标题】:how report highscore in Game center with swift 【发布时间】:2014-12-04 21:04:16 【问题描述】:

我正在尝试在游戏中心报告我的高分。我认为我的代码正在运行,但游戏中心没有更新高分。 排行榜是使用此参考名称创建的:“funfairBalloon”和此排行榜 ID:55009943。 我有 3 个沙盒测试器,游戏中心已启用,玩家在游戏中心进行身份验证。

我的身份验证和报告代码是:

func authenticateLocalPlayer()

    var localPlayer = GKLocalPlayer.localPlayer()

    localPlayer.authenticateHandler =
         (viewController : UIViewController!, error : NSError!) -> Void in
            if viewController != nil
            
                self.presentViewController(viewController, animated:true, completion: nil)
            
            else
            
                if GKLocalPlayer.localPlayer().authenticated 
                    let gkScore = GKScore(leaderboardIdentifier: "55009943")
                    gkScore.value = Int64(highscore)
                    GKScore.reportScores([gkScore], withCompletionHandler: (error) -> Void in
                        let alert = UIAlertView(title: "Success",
                            message: "Score updated",
                            delegate: self,
                            cancelButtonTitle: "Ok")
                            alert.show()
                        )
                
             
        

你有什么想法吗?

【问题讨论】:

最好将您的应用 ID 添加到排行榜标识符中。在那之前我很难让它工作。你可能会遇到同样的麻烦。制作一个名为“com.whateverName.55009943”的测试排行榜并更新您的代码。看看这对我是否有效。 我在 iTunes 连接上创建了一个名为“com.whateverName.55009943”的排行榜并更新了'leaderboardIdentifier : "com.whateverName.55009943",但游戏中心仍然没有得分和玩家。 qmzdcjselrbhvslkvhblqziehbflshbv AAAAAHHHHHHHHH 我疯了yyyyyyy YAHOUUUUUU !!!谢谢你,我发现了我的错误!我的排行榜没有设置好!我爱你 !!!!从 3 天开始寻找!!!! 你必须回答 +50 声望 :D 但是我在游戏中心的沙盒测试器中看不到其他玩家是否正常? 【参考方案1】:

最好将您的应用 ID 添加到排行榜标识符。在那之前我很难让它工作。你可能会遇到同样的麻烦。制作一个名为“com.whateverName.55009943”的测试排行榜并更新您的代码。看看这对我是否有效。

如果您为沙盒测试人员使用 Test Flight,请务必将它们添加到 iTunes connect 中。

最后,如果您遵循上述建议,这个link 应该可以帮助您解决为什么没有看到任何人出现在排行榜上。

【讨论】:

【参考方案2】:

你可以在这个github repo https://github.com/jocelynlih/SwiftGameBook/blob/master/PencilAdventure/PencilAdventure/ScoreManager.swift#L26看看这个逻辑

要报告分数,您需要调用通过 authenticateHandler 闭包函数,如果 localPlayer 已通过身份验证,则报告分数。

var localPlayer = GKLocalPlayer.localPlayer() localPlayer.authenticateHandler = (viewController : UIViewController!, error : NSError!) -> Void in if viewController != .None // Show view controller else if localPlayer.authenticated var scoreToReport = GKScore(leaderboardIdentifier: "Leaderboard\(level)", player: localPlayer) scoreToReport.value = Int64(score) GKScore.reportScores([scoreToReport], withCompletionHandler: nil) else // User not authenticated

【讨论】:

感谢您的信息,但我尝试了您的代码,但它不起作用。我试图理解 github repo 中的逻辑,但我的知识太弱了......我仍然有同样的信息:report score <GKScore: 0x7fc1bca31b30>player:playerID:g:F586362F0C610DB51DC5221012AE9D92 alias:Sophie88 rank:0 date:2014-12-05 21:58:29 +0000 value:9 formattedValue:(null) context:0x0 leaderboard:funfairBalloon group:(null)

以上是关于如何用swift在游戏中心报告高分的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift3中覆盖高分

如何用VB6编写一个计时器(如秒表的)高分

使用 Swift 在 Sprite Kit 游戏中重置高分

高分200!!如何用DOS命令运行程序

如何用swift写GCD

如何用CMD提取一个文件路径的文件名?并赋值 高分送上