我一直试图将我的游戏中心代码分成一个辅助类,根据本网站和其他人的众多教程。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类中工作。我被卡住了,并正试图弄清楚这个问题。 谢谢你的帮助。