Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 游戏中心身份验证不工作_Swift_Sprite Kit - Fatal编程技术网

Swift 游戏中心身份验证不工作

Swift 游戏中心身份验证不工作,swift,sprite-kit,Swift,Sprite Kit,我的游戏中心身份验证不起作用。当我构建并运行时,它不会显示我的用户名。。已登录。此外,当我尝试添加分数时,屏幕上会显示“无可用数据”。这是我的密码 override func viewDidLoad() { super.viewDidLoad() gcAuthPlayer() } @IBAction func GCButton(sender: AnyObject) { saveHighScore(GameScene().h

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

 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
每次你尝试更新分数时,你都会创建一个新的游戏场景实例,因此你的分数为零

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

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上查看此帮助程序

让我知道进展如何