2015-12-22 82 views
5

我目前有Game Center在iOS目標中工作,但沒有在tvOS目標中工作。tvOS中的遊戲中心沒有顯示

我已經添加了排行榜的圖像和放置標識在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, 
               animated: true, 
               completion: nil) 
    } 
    } 


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

您可以添加更多信息嗎?您是否檢查過用戶初始化成功並且gameCenterEnabled爲真? – Stefan

+0

@Stefan檢查'func authenticateLocalPlayer()'。另外,我還有另一個運行Game Center代碼的類,但我非常肯定我發佈的類是主類。就像我說的,這在iOS中工作正常。我甚至能夠發佈高分,但不是在tvOS上。 – Paul

回答

0

確保你在你的應用程序的資產目錄的 「Apple TV的儀表板圖像」。儀表板圖稿應該是透明的923x150,並且不需要分層,因爲用戶無法選擇它。

tvOS Human Interface Guidelines聲稱儀表板的圖稿是可選的,但根據我的經驗,如果您沒有它,GKGameCenterViewController會拒絕顯示。