2016-04-01 4 views
0

My Game Center Authentication не работает. Когда я создаю и запускаю, он не покажет мое имя пользователя .. вошел в систему. Кроме того, когда я пытаюсь добавить свой балл, я получаю экран, в котором говорится, что «нет доступных данных». Вот мой код.Игровой центр Аутентификация не работает

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) 
    } 

ответ

0

Этот код не имеет смысла

  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 потому что это статическое свойство.

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

Позвольте мне знать, как она идет.

Смежные вопросы