2015-06-18 132 views
0

我一直试图将我的游戏中心代码分成一个辅助类,根据本网站和其他人的众多教程。Swift SpriteKit游戏中心

这是我目前在我的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()”,它使我问题在1-2点。

换句话说,我将如何重写旧的现有代码以使其在NSObject类中工作。我被卡住了,并正试图弄清楚这个问题。 谢谢你的帮助。

回答

0

我也解决了很久以前,但只是有人看到这一点。 我只是把这些函数放在gameViewController中,以显示登录屏幕或菜单,而不是我以前在助手类中的内容。

func showGameCenterLogin() { 

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

func showGameCenterMenu() { 

    GameCenter.showGameCenterMenu(self, viewState: .Default) 

}

,比在需要时与NSNotificationCenter调用它们。

要记录分数,我只需调用带有corrent分数和/或排行榜ID的函数来保存它,这是显而易见的,我不记得为什么这导致我回来的问题比。

GameCenter.sharedInstance.saveHighScore(highScore)