2015-12-22 8 views
5

दिखा रहा है वर्तमान में मेरे पास आईओएस लक्ष्य में काम कर रहे गेम सेंटर हैं, लेकिन टीवीओएस लक्ष्य में काम नहीं कर रहे हैं।टीवीओएस में गेम सेंटर

मैं पहले से ही लीडरबोर्ड छवियों जोड़ा गया है और यहां 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 प्रमाणीकरण लोकलप्लेयर()' की जांच करें। इसके अलावा, मेरे पास एक और कक्षा है जो कुछ गेम सेंटर कोड चलाती है, लेकिन मुझे पूरा यकीन है कि मैंने जो कक्षा पोस्ट की है वह मुख्य वर्ग है। जैसे मैंने कहा, यह आईओएस में ठीक काम करता है। मैं इसे उच्च स्कोर पोस्ट करने में भी सक्षम हूं, लेकिन टीवीओएस पर नहीं। – Paul

उत्तर

0

सुनिश्चित करें कि आप एक "एप्पल टीवी डैशबोर्ड छवि" यदि आपके ऐप की संपत्ति सूची में किया हुआ है। डैशबोर्ड आर्टवर्क 923x150 पारदर्शिता के साथ होना चाहिए, और इसे स्तरित करने की आवश्यकता नहीं है क्योंकि उपयोगकर्ता इसे चुन नहीं सकता है।

tvOS Human Interface Guidelines दावा करता है कि डैशबोर्ड आर्टवर्क वैकल्पिक है, लेकिन मेरे अनुभव में GKGameCenterViewController आपके पास नहीं होने पर इनकार करने से इंकार कर देगा।

संबंधित मुद्दे