加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – tvOS的游戏中心没有出现

发布时间:2020-12-14 04:54:43 所属栏目:百科 来源:网络整理
导读:我目前在我的iOS目标中使用Game Center,但没有在tvOS目标中工作. 我已经添加了Leaderboard图像并将标识符放在Xcode中: 这是我用来调出排行榜并启动播放器的课程.它叫做GameKitHelper.swift: import UIKitimport Foundationimport GameKitlet PresentAuthen
我目前在我的iOS目标中使用Game Center,但没有在tvOS目标中工作.

我已经添加了Leaderboard图像并将标识符放在Xcode中:

enter image description here

这是我用来调出排行榜并启动播放器的课程.它叫做GameKitHelper.swift:

import UIKit
import Foundation
import GameKit

let PresentAuthenticationViewController = "PresentAuthenticationViewController"

class GameKitHelper: NSObject {

  static let sharedInstance = GameKitHelper()


  var authenticationViewController: UIViewController?
  var gameCenterEnabled = false

  func authenticateLocalPlayer() {

    //1
    let localPlayer = GKLocalPlayer()
    localPlayer.authenticateHandler = {(viewController,error) in

        if viewController != nil {
            //2
            self.authenticationViewController = viewController

                 NSNotificationCenter.defaultCenter().postNotificationName(PresentAuthenticationViewController,object: self)
        } 
    else if error == nil {
            //3
            self.gameCenterEnabled = true
        }
    }

 }

 func reportAchievements(achievements: [GKAchievement],errorHandler: ((NSError?)->Void)? = nil) {
    guard gameCenterEnabled else {
        return
    }

    GKAchievement.reportAchievements(achievements,withCompletionHandler: errorHandler)
 }

 func showGKGameCenterViewController(viewController: UIViewController) {
    guard gameCenterEnabled else {
        return
    }

    //1
    let gameCenterViewController = GKGameCenterViewController()

    //2
    gameCenterViewController.gameCenterDelegate = self

    //3
    viewController.presentViewController(gameCenterViewController,animated: true,completion: nil)
}

   func saveHighScore(identifier: String,score: Int) {

     if (GKLocalPlayer.localPlayer().authenticated) {

        let scoreReporter = GKScore(leaderboardIdentifier: identifier)
        scoreReporter.value = Int64(score)

        let scoreArray:[GKScore] = [scoreReporter]

        GKScore.reportScores(scoreArray,withCompletionHandler: {

            error -> Void in

            if (error != nil) {

                print("error")
            }
            else {

                print("Posted score of (score)")
            }
        })
    }
  }
 }

extension GameKitHelper: GKGameCenterControllerDelegate {
  func gameCenterViewControllerDidFinish(gameCenterViewController:   GKGameCenterViewController) {
    gameCenterViewController.dismissViewControllerAnimated(true,completion: nil)
 }
}

NavigationController类:

override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(self,selector: Selector("showAuthenticationViewController"),name: PresentAuthenticationViewController,object: nil)
    GameKitHelper.sharedInstance.authenticateLocalPlayer()
 }

 func showAuthenticationViewController() {
    let gameKitHelper = GameKitHelper.sharedInstance

    if let authenticationViewController = gameKitHelper.authenticationViewController {
        topViewController?.presentViewController(authenticationViewController,completion: nil)
     }
  }


  deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
  }

解决方法

确保您的应用资产目录中有“Apple TV Dashboard Image”.仪表板图稿应为923×150,具有透明度,并且不需要分层,因为用户无法选择它.

tvOS Human Interface Guidelines声称仪表板图稿是可选的,但根据我的经验,GKGameCenterViewController将拒绝出现,如果您没有.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读