Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift游戏中心运行不正常_Ios_Xcode_Swift_Sprite - Fatal编程技术网

Ios Swift游戏中心运行不正常

Ios Swift游戏中心运行不正常,ios,xcode,swift,sprite,Ios,Xcode,Swift,Sprite,我在使用GameCenter时遇到了两个问题 如果玩家未登录GameCenter,则在If向您发出警告说您未登录后,我将无法再单击视图中的任何按钮 如果玩家登录GameCenter,在访问排行榜后,按“完成”不会关闭排行榜视图 以下是我与GameCenter相关的代码: GameViewController: func authPlayer() { // Gets called in ViewDidLoad let localPlayer = GKLocalPlayer.localPla

我在使用GameCenter时遇到了两个问题

  • 如果玩家未登录GameCenter,则在If向您发出警告说您未登录后,我将无法再单击视图中的任何按钮

  • 如果玩家登录GameCenter,在访问排行榜后,按“完成”不会关闭排行榜视图

  • 以下是我与GameCenter相关的代码:

    GameViewController:

    func authPlayer() { // Gets called in ViewDidLoad
        let localPlayer = GKLocalPlayer.localPlayer()
        localPlayer.authenticateHandler = {
            (view, error) in
    
            if view != nil {
                self.presentViewController(view!, animated: true, completion: nil)
            }
            else {
                print(GKLocalPlayer.localPlayer().authenticated)
            }
        }
    }
    
    游戏场景:

    if gameCenterBtn.containsPoint(location) { // In touches began for touch in touches
                saveHighScore(highLevel)
                let viewController = self.view!.window?.rootViewController
                let gcvc = GKGameCenterViewController()
                viewController?.presentViewController(gcvc, animated: true, completion: nil)
            }
    
    func saveHighScore(number : Int) {
        if GKLocalPlayer.localPlayer().authenticated {
            let scoreReporter = GKScore(leaderboardIdentifier: "myLeaderBoardID")
    
            scoreReporter.value = Int64(number)
            let scoreArray : [GKScore] = [scoreReporter]
    
            GKScore.reportScores(scoreArray, withCompletionHandler: nil)
        }
    }
    
    func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) {
        gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
    }
    
    任何和所有帮助都将不胜感激

    1)不确定这是否会有帮助,但您的登录代码不太正确。如果没有登录视图控制器,则不一定意味着玩家已登录。您也没有处理可选错误。试试这个

     localPlayer.authenticateHandler = { [unowned self] (viewController, error) in // will handle login changes also
            if let error = error {
                print(error.localizedDescription)
                return
            }
    
            if let viewController = viewController {
                self.presentViewController(viewController, animated: true, completion: nil)
            }
            else if self.localPlayer.authenticated {
                print("Player authenticated")
            }
            else {
                print("Player not authenticated")
    
            }
        }      
    
    我不知道为什么你的gameViewCntroller不会响应。你不只是在gameViewController中加载第一个场景吗。 你能不能用一些代码进一步描述一下什么东西在以后不起作用

    2) 它不会因为您没有设置代理而取消屏幕

    您在创建游戏中心viewController的位置编写的代码应如下所示

     let viewController = self.view?.window?.rootViewController
     let gcvc = GKGameCenterViewController()
     gcvc.gameCenterDelegate = self // YOU FORGOT THIS LINE
     viewController?.presentViewController(gcvc, animated: true, completion: nil)