2016-03-19 6 views
0

У меня есть 2 проблемы, с которыми я столкнулся с GameCenter. неSwift GameCenter не работает должным образом

  1. Если игрок не будет подписан в GameCenter, после того, как если дает предупреждение говорят, что вы не авторизованы, я больше не в состоянии нажать любые кнопки у меня есть на мой взгляд.

  2. Если игрок зарегистрирован в GameCenter, после доступа к Leaderboards нажатие «done» не отменяет вид таблицы лидеров.

Вот мой код, который относится к GameCenter:

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

Любые и вся помощь будет оценена

ответ

0

1) Не су re это поможет, но ваш код входа не совсем корректен. Если контроллер входа в систему отсутствует, это необязательно означает, что игрок зарегистрирован. Вы также не обрабатываете дополнительную ошибку. Попробуйте это вместо этого.

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

     } 
    }  

Я не уверен, почему ваш игровой контроллер не ответит. Вы не просто загружаете первый SKScene в свой игровой контроллер. Не могли бы вы описать, возможно, с некоторым кодом, что не работает после этого.

2) Не отклоняется экран, потому что вы не установили делегата.

Вы код, где вы создаете Game Center ViewController должен выглядеть следующим образом

let viewController = self.view?.window?.rootViewController 
let gcvc = GKGameCenterViewController() 
gcvc.gameCenterDelegate = self // YOU FORGOT THIS LINE 
viewController?.presentViewController(gcvc, animated: true, completion: nil) 
Смежные вопросы