0

私はスプライトキットでゲームを作っています.GameCenter内部で使用する前にすべてうまくいきました.ここに私のコードがあります

define the Gameviewcontroller:

var GameController:GameViewController = GameViewController()

内のノードに触れるとTouchecBegan:

    let touchLocation = (touches as NSSet).anyObject()?.locationInNode(self)

    let targetNode = self.nodeAtPoint(touchLocation!)

    if targetNode.name == "leader"{

        print("hhhh")

        GameController.showGamecenetr()

    }

GameViewControllerのコード内ShowGameCenter

func showGamecenetr() {

    print("jijijijji")

    GameKitHelper.sharedInstance.showGKGameCenterViewController(self)

}

のビューをポップする必要GameCenterがありますが、次のエラーが表示されます。

タイプの値をキャストできませんでしUIViewSubView

非常に簡単なエラーであることがわかりましたが、これまでここで遭遇したことはありません。対処方法がわかりません。誰か助けてくれませんか?

内部のコードは次のとおりです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)

    }

助けて ;(

4

1 に答える 1

1

したがって、ローカルプレーヤー/ユーザーを認証したと仮定します。開くGameCenterには、シーンでこのようにするだけです

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あなたのシーンで

class GameScene: SKScene, GKGameCenterControllerDelegate {

func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) {

    AppDelegate().resumeBackgroundMusic()
    gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}
于 2015-11-26T15:35:51.467 に答える