Reputation: 61
I am making a game with sprite kit , and all went fine before I use GameCenter
inside , Here is my code
define the Gameviewcontroller:
var GameController:GameViewController = GameViewController()
When you touch the node inside the TouchecBegan
:
let touchLocation = (touches as NSSet).anyObject()?.locationInNode(self)
let targetNode = self.nodeAtPoint(touchLocation!)
if targetNode.name == "leader"{
print("hhhh")
GameController.showGamecenetr()
}
and inside the GameViewController
the code of ShowGameCenter
:
func showGamecenetr() {
print("jijijijji")
GameKitHelper.sharedInstance.showGKGameCenterViewController(self)
}
It should pop the view of GameCenter
, but it shows the error:
could not cast value of type UIView
to SubView
I found that it is a very easy error , but I never met it here before , I don't know how to handle it ,Can anybody help me ?
Here are the code that inside showGKGameCenterViewController()
func showGKGameCenterViewController(viewController:UIViewController!){
if !gamecenterEnable {
print("No user!")
return
}
let gameCenterViewController = GKGameCenterViewController()
gameCenterViewController.gameCenterDelegate = self
gameCenterViewController.viewState = .Leaderboards
viewController.presentViewController(gameCenterViewController, animated: true, completion: nil)
}
help help ;(
Upvotes: 0
Views: 97
Reputation: 974
So i assume you authenticated your local player/user.
To open GameCenter
just do it like this in your scene
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch in touches {
let location = touch.locationInNode(self)
let touchedNode = nodeAtPoint(location)
if targetNode.name == "leader"{
let gcViewController: GKGameCenterViewController = GKGameCenterViewController()
gcViewController.gameCenterDelegate = self
gcViewController.leaderboardIdentifier = kLeaderboardID
gcViewController.viewState = GKGameCenterViewControllerState.Leaderboards
let vc: UIViewController = self.view!.window!.rootViewController!
vc.presentViewController(gcViewController, animated: true, completion: nil)
}
}
}
GKGameCenterControlleDelegate
in your scene
class GameScene: SKScene, GKGameCenterControllerDelegate {
And
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) {
AppDelegate().resumeBackgroundMusic()
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}
Upvotes: 1