gpt4 book ai didi

swift - 游戏中心验证不起作用

转载 作者:行者123 更新时间:2023-11-30 13:33:04 24 4
gpt4 key购买 nike

我的游戏中心身份验证不起作用。当我构建并运行时,它不会显示我的用户名..已登录。此外,当我尝试添加我的分数时,我会看到一个屏幕,显示“没有可用数据”。这是我的代码。

 override func viewDidLoad() {
super.viewDidLoad()
gcAuthPlayer()
}

@IBAction func GCButton(sender: AnyObject) {



saveHighScore(GameScene().highScoreNumer)
showLeaderBoard()
if GameScene().currentScore > GameScene().highScoreNumer{
saveHighScore(GameScene().currentScore)
}


}
func showLeaderBoard(){
let viewController = self.view.window?.rootViewController
let gcvc = GKGameCenterViewController()

gcvc.gameCenterDelegate = self

viewController?.presentViewController(gcvc, animated: true, completion: nil)

}
func saveHighScore(number: Int){

if GKLocalPlayer.localPlayer().authenticated{
let scoreReporter = GKScore(leaderboardIdentifier: "myleaderboard")

scoreReporter.value = Int64(number)

let scoreArray : [GKScore] = [scoreReporter]

GKScore.reportScores(scoreArray, withCompletionHandler: nil)


}
}
func gcAuthPlayer(){
let localPlayer = GKLocalPlayer.localPlayer()

localPlayer.authenticateHandler = {
(view, error) in


if view != nil{
self.presentViewController(view!, animated: true, completion: nil)

}else{
print(GKLocalPlayer.localPlayer().authenticated)

}

}



}

func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) {
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}

最佳答案

这段代码毫无意义

         saveHighScore(GameScene().highScoreNumer)
showLeaderBoard()
if GameScene().currentScore > GameScene().highScoreNumer{
saveHighScor

每次尝试更新分数时,您都会创建一个新的 GameScene 实例,因此您的分数为零

我需要查看更多代码,但现在您需要更改游戏场景中的分数属性。例如,将其设置为静态属性,以便您可以在其他类中获取它。

class GameScene: SKScene {

static var currentScore = 0
static var highscoreNumber = 0
}

比在场景或 ViewController 中你可以像这样得到它

 GameScene.currentScore = 5
GameScene.highscoreNumber = 5

请记住,每次重新启动游戏场景时都必须将分数重置为 0,因为它是静态属性。

GameScene.currentScore = 0
GameScene.highscoreNumber = 0

发布分数的代码应该如下所示

    saveHighScore(GameScene.highScoreNumer)
showLeaderBoard()
if GameScene.currentScore > GameScene.highScoreNumer{
saveHighScor

您的分数报告代码还应该处理错误并实际执行完成处理程序。因此将其更改为类似这样的内容。

  /// Save leaderboard progress
func reportLeaderboardProgress(value: Int, leaderboardID: String) {

let scoreReporter = GKScore(leaderboardIdentifier: leaderboardID)
scoreReporter.value = Int64(value)

GKScore.reportScores([scoreReporter]) { error in // Trailing Closure syntax
if let error = error {
print(error.localizedDescription)
return
}

print("Reported leaderboard progress \(value) to leaderboardID \(leaderboardID)")
}
}

将代码移动到另一个类中也是一个好主意,以保持整体代码更干净且更可重用。有关一个简单的示例,请查看 gitHub 上的此帮助程序。

https://github.com/jackcook/GCHelper

让我知道进展如何。

关于swift - 游戏中心验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36365497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com