2014-09-22 63 views
0

我目前正在使用Swift开发我的第一款iOS游戏。不幸的是,到目前为止,我在实现Gamecenter方面遇到了更多问题。Gamecenter排行榜使用SpriteKit无法使用Swift完成按钮

搞清楚如何让领先弹出,并保存在我的下一个问题榜我撞到后:

我怎样才能让“完成”按钮上的工作?如果我按它没有任何反应。

首先我所有代码:

GameViewController.swift:

import GameKit   

    .... 

override func viewWillLayoutSubviews() { 

    let skView = self.view as SKView 
    skView.ignoresSiblingOrder = true 

    let scene = GameScene.sceneWithSize(skView.bounds.size) 
    scene.scaleMode = .AspectFill 

    skView.presentScene(scene) 

    authenticateLocalPlayer() 

} 

func authenticateLocalPlayer(){ 
    var localPlayer = GKLocalPlayer() 
    println(localPlayer) 
    localPlayer.authenticateHandler = {(viewController, error) -> Void in 
     if ((viewController) != nil) { 
      self.presentViewController(viewController, animated: true, completion: nil) 
     }else{ 

      println((GKLocalPlayer.localPlayer().authenticated)) 
     } 
    } 
} 

GameScene.swift:

import GameKit   

    .... 

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 

    var touch:UITouch = touches.anyObject() as UITouch 
    var location:CGPoint = touch.locationInNode(self) 

    if gameCenterRect.contains(location) { 

      var vc = self.view?.window?.rootViewController 
      var gc = GKGameCenterViewController() 
      vc?.presentViewController(gc, animated: true, completion: nil) 

     } 

func saveHighscore(score:Int){ 

    NSUserDefaults.standardUserDefaults().setObject(score, forKey: "kHighscore") 

    if GKLocalPlayer.localPlayer().authenticated { 
     var scoreReporter = GKScore(leaderboardIdentifier: "LEADERBOARD_ID") 
     scoreReporter.value = Int64(self.highscore) 
     var scoreArray: [GKScore] = [scoreReporter] 
     //println("report score \(scoreReporter)") 
     GKScore.reportScores(scoreArray, {(error : NSError!) -> Void in 
      if error != nil { 
       println("error") 
       //NSLog(error.localizedDescription) 
      } 
     }) 

    } 
} 

我在哪里有东西添加到我的代码来获得背部?

回答

4

则必须将此行添加到您的游戏场景:

class GameScene: SKScene, SKPhysicsContactDelegate,UIGestureRecognizerDelegate,  GKGameCenterControllerDelegate{ 

func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController!) 
{ 
    gameCenterViewController.dismissViewControllerAnimated(true, completion: nil) 

} 

和解决这个问题

if gameCenterRect.contains(location) { 

    var vc = self.view?.window?.rootViewController 
    var gc = GKGameCenterViewController() 
    gc.gameCenterDelegate = self 
    vc?.presentViewController(gc, animated: true, completion: nil) 

}