2016-04-01 29 views
0

私のゲームセンター認証が機能していません。私がビルドして実行すると、私のユーザ名は表示されません。ログインしました。また、スコアを追加しようとすると、「no availible」という画面が表示されます。私のコードをheres。ゲームセンターの認証が機能しない

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

このコードは、あなたがGameScene毎回の新しいインスタンスを作成している

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

は意味あなたがスコアを更新しようとするので、あなたのスコアは、私はいくつかを見る必要があるだろう

nilのを行うものではありませんより多くのコードが、あなたのゲームのシーンでスコアプロパティを変更する必要があります。例えば、静的なプロパティにして、他のクラスで取得できるようにします。あなたのシーンやのViewControllerに比べ

class GameScene: SKScene { 

     static var currentScore = 0 
     static var highscoreNumber = 0 
    } 

ので

GameScene.currentScore = 5 
GameScene.highscoreNumber = 5 

はちょうどあなたがそれ静的プロパティので、あなたがあなたのgameSceneを再起動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

私はそれが行く方法を知ってみましょう。

関連する問題