2015-06-18 7 views
0

Я пытаюсь разбить код Game Center на вспомогательный класс в соответствии с многочисленными учебниками на этом веб-сайте и другими.Swift SpriteKit Game Center

Это то, что я в настоящее время в моем GameViewController.swift

func loadGameCenter() { 

    var localPlayer = GKLocalPlayer.localPlayer() 

    localPlayer.authenticateHandler = {(viewController, error) -> Void in 

     if (viewController != nil) { 

     self.presentViewController(viewController, 
     animated: true, completion: nil) //POINT 1 
     } 
     else { 
      println((GKLocalPlayer.localPlayer().authenticated)) 
     } 
    } 
} 

В моей MenuScene.swift, который является SKScene, у меня есть этот код.

func saveHighScore(highScore:Int) { 

    if GKLocalPlayer.localPlayer().authenticated { 
     var scoreReporter = GKScore(leaderboardIdentifier: leaderboardID) 
     scoreReporter.value = Int64(highScore) 

     var scoreArray: [GKScore] = [scoreReporter] 
     GKScore.reportScores(scoreArray, withCompletionHandler: {(error : NSError!) -> Void in 
      if error != nil { 
       println("Error") 
      } 
     }) 
    } 
} 
func showGameCenter() { 

    var vc = self.view!.window!.rootViewController! //POINT 2 
    var gc = GKGameCenterViewController() 
    gc.gameCenterDelegate = self 
    gc.viewState = GKGameCenterViewControllerState.Leaderboards 
    vc.presentViewController(gc, animated: true, completion: nil) 
} 
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController!) { 

    gameCenterViewController.dismissViewControllerAnimated(true, completion: nil) 
} 

Теперь я пытался поставить вышеупомянутый код во вспомогательном класс под названием GameCenter.swift, который является подклассом NSObject. Я написал это сразу после имени класса, чтобы сделать упомянутые выше методы доступными в других моих сценариях (в соответствии с учебниками).

class var sharedInstance: GameCenter { 
    struct Static { 
     static let instance = GameCenter() 
    } 
    return Static.instance 
} 

class func loadGameCenter() { 
    GameCenter.sharedInstance.loadGameCenter() 
} 

class func saveHighScore() { 
    GameCenter.sharedInstance.saveHighScore(highScore) 
} 

class func showLeaderboard() { 
    GameCenter.sharedInstance.showLeaderboard() 
} 

Проблема, которую я имею что когда я пытаюсь вызвать определенные функции класса из моего MenuScene.swift, например «GameCenter.loadGameCenter()» или «GameCenter.showLeaderboard()», это вызывает у меня вопросы на POINT 1-2.

Другими словами, как мне нужно переписать старый старый код, чтобы он работал в классе NSObject. Я застрял и пытаюсь понять это целую вечность. Благодарим вас за помощь.

ответ

0

Я также решил много лет назад, но просто хотел, чтобы кто-то это увидел. Я просто поставил эти функции в gameViewController для отображения экрана входа или меню, а не того, что у меня было ранее в классе Helper.

func showGameCenterLogin() { 

    self.presentViewController(GameCenter.sharedInstance.presentingViewController, animated: true, completion: nil) 
} 

func showGameCenterMenu() { 

    GameCenter.showGameCenterMenu(self, viewState: .Default) 

}

и чем называть их с NSNotificationCenter при необходимости.

Чтобы записать оценку, я просто позвоню функции с помощью коэффициента корреляции и/или идентификатора лидера, чтобы сохранить его, что очевидно, и я не могу вспомнить, почему это вызвало проблемы.

GameCenter.sharedInstance.saveHighScore(highScore)