2016-03-19 5 views
0

Ich habe 2 Probleme, die ich mit GameCenter erlebe.Swift GameCenter verhält sich nicht richtig

  1. Wenn ein Spieler in Game Center nicht unterzeichnet ist, nach, wenn Sie sagen, die Warnung erhalten Sie nicht angemeldet sind, ich bin nicht mehr in der Lage alle Schaltflächen klicken ich auf meiner Ansicht haben.

  2. Wenn ein Spieler nach dem Zugriff auf die Bestenlisten in GameCenter angemeldet ist, wird durch Drücken von "Fertig" die Ranglistenansicht nicht geschlossen.

Hier ist mein Code, der auf Gamecenter bezieht:

GameViewController:

func authPlayer() { // Gets called in ViewDidLoad 
    let localPlayer = GKLocalPlayer.localPlayer() 
    localPlayer.authenticateHandler = { 
     (view, error) in 

     if view != nil { 
      self.presentViewController(view!, animated: true, completion: nil) 
     } 
     else { 
      print(GKLocalPlayer.localPlayer().authenticated) 
     } 
    } 
} 

GameScene:

if gameCenterBtn.containsPoint(location) { // In touches began for touch in touches 
      saveHighScore(highLevel) 
      let viewController = self.view!.window?.rootViewController 
      let gcvc = GKGameCenterViewController() 
      viewController?.presentViewController(gcvc, animated: true, completion: nil) 
     } 

func saveHighScore(number : Int) { 
    if GKLocalPlayer.localPlayer().authenticated { 
     let scoreReporter = GKScore(leaderboardIdentifier: "myLeaderBoardID") 

     scoreReporter.value = Int64(number) 
     let scoreArray : [GKScore] = [scoreReporter] 

     GKScore.reportScores(scoreArray, withCompletionHandler: nil) 
    } 
} 

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

würde Jedwedes Hilfe

Antwort

0

1 ersichtlich,) Nicht su Das wird Ihnen helfen, aber Ihr Login-Code ist nicht ganz korrekt. Wenn es keinen Login-View-Controller gibt, heißt das nicht unbedingt, dass der Player angemeldet ist. Sie behandeln den optionalen Fehler auch nicht. Versuchen Sie es stattdessen.

localPlayer.authenticateHandler = { [unowned self] (viewController, error) in // will handle login changes also 
     if let error = error { 
      print(error.localizedDescription) 
      return 
     } 

     if let viewController = viewController { 
      self.presentViewController(viewController, animated: true, completion: nil) 
     } 
     else if self.localPlayer.authenticated { 
      print("Player authenticated") 
     } 
     else { 
      print("Player not authenticated") 

     } 
    }  

Ich bin mir nicht sicher, warum Ihr GameViewCntroller nicht reagiert. Laden Sie nicht einfach die erste SKScene in Ihren gameViewController. Kannst du weiter beschreiben, vielleicht mit etwas Code, was danach nicht funktioniert?

2) Der Bildschirm wird nicht gelöscht, weil Sie den Delegaten nicht festgelegt haben.

Sie Code, wo Sie das Game Center Viewcontroller schaffen wie diese

let viewController = self.view?.window?.rootViewController 
let gcvc = GKGameCenterViewController() 
gcvc.gameCenterDelegate = self // YOU FORGOT THIS LINE 
viewController?.presentViewController(gcvc, animated: true, completion: nil) 
aussehen sollte