我一直試圖將我的遊戲中心代碼分成一個輔助類,根據本網站和其他人的衆多教程。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類中工作。我被卡住了,並正試圖弄清楚這個問題。 謝謝你的幫助。