Şu anda iOS sistemimde çalışmakta olan ama TVOS hedefinde çalışmayan bir Oyun Merkezi var.TVOS'daki Oyun Merkezi görünmüyor
Zaten Afiş görüntüleri eklendi ve burada Xcode tanımlayıcı yerleştirdiğiniz:
Bu benim oyuncu leaderboard'unuz getirmek ve başlatmaya kullanıyorum sınıftır. Bu GameKitHelper.swift deniyor:
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 sınıfı:
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)
}
Biraz daha fazla bilgi ekleyebilir misiniz? Kullanıcı başlatılmasının başarılı olduğunu ve gameCenterEnabled'ın doğru olduğunu kontrol ettiniz mi? – Stefan
@Stefan 'func authenticateLocalPlayer()' kontrol edin. Ayrıca, bazı Game Center kodlarını çalıştıran başka bir sınıfım var, ancak gönderdiğim sınıfın ana sınıf olduğundan eminim. Dediğim gibi, bu iOS'de gayet iyi çalışıyor. Hatta yüksek puanlar yayınlayabiliyorum, ancak TVOS'ta değil. – Paul