2016-04-01 16 views
0

Oyun Merkezim Kimlik Doğrulama çalışmıyor. Oluşturduğumda ve çalıştırdığımda, kullanıcı adımı göstermez. Oturum açtı. Ayrıca, puanımı eklemeye çalıştığımda "veri yok" yazan bir ekran elde ettim. Heres benim kodum.Oyun merkezi Kimlik doğrulamıyor çalışmıyor

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

cevap

0

Bu kod Sen GameScene her şey yeni bir örneğini oluştururken

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

hiçbir anlamı sen skor güncellemeyi deneyin ve bu nedenle skor Biraz görmek gerekir

nil yapar Daha fazla kod ama şimdilik oyun sahnesindeki skor özelliğini değiştirmeniz gerekiyor. Örneğin, onu statik bir özellik haline getirin, böylece diğer sınıflarda alabilirsiniz. senin Sahneler veya viewController içinde daha

class GameScene: SKScene { 

     static var currentScore = 0 
     static var highscoreNumber = 0 
    } 

bunu sadece size gameScene bunun nedeni statik özellik yeniden 0 everytime skoru sıfırlamak zorunda olduğunu hatırlamak böylece

GameScene.currentScore = 5 
GameScene.highscoreNumber = 5 

gibi alabilirsiniz. puan sonrası için kodunuzu daha

GameScene.currentScore = 0 
GameScene.highscoreNumber = 0 

da hatayı işlemesi gerektiğini bu

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

puanınız raporlama kodu gibi bakmak ve aslında tamamlama işleyicisi yapmalıdır. Bu yüzden böyle bir şeye değiştirin.

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

Ayrıca genel kod temiz ve daha yeniden kullanılabilir tutmak için başka bir sınıfta bu kodu taşımak için iyi bir fikirdir. Güzel ve basit bir örnek için bu yardımcıyı gitHub'da kontrol edin.

https://github.com/jackcook/GCHelper

bana nasıl gidiyor bildirin.

İlgili konular