2015-06-18 53 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)