happyzhang187
happyzhang187

Reputation: 61

In spritekit I cant pop GameCenter view

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

Answers (1)

Darvas
Darvas

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

Related Questions