Swift 游戏中心身份验证不工作
我的游戏中心身份验证不起作用。当我构建并运行时,它不会显示我的用户名。。已登录。此外,当我尝试添加分数时,屏幕上会显示“无可用数据”。这是我的密码Swift 游戏中心身份验证不工作,swift,sprite-kit,Swift,Sprite Kit,我的游戏中心身份验证不起作用。当我构建并运行时,它不会显示我的用户名。。已登录。此外,当我尝试添加分数时,屏幕上会显示“无可用数据”。这是我的密码 override func viewDidLoad() { super.viewDidLoad() gcAuthPlayer() } @IBAction func GCButton(sender: AnyObject) { saveHighScore(GameScene().h
override func viewDidLoad() {
super.viewDidLoad()
gcAuthPlayer()
}
@IBAction func GCButton(sender: AnyObject) {
saveHighScore(GameScene().highScoreNumer)
showLeaderBoard()
if GameScene().currentScore > GameScene().highScoreNumer{
saveHighScore(GameScene().currentScore)
}
}
func showLeaderBoard(){
let viewController = self.view.window?.rootViewController
let gcvc = GKGameCenterViewController()
gcvc.gameCenterDelegate = self
viewController?.presentViewController(gcvc, animated: true, completion: nil)
}
func saveHighScore(number: Int){
if GKLocalPlayer.localPlayer().authenticated{
let scoreReporter = GKScore(leaderboardIdentifier: "myleaderboard")
scoreReporter.value = Int64(number)
let scoreArray : [GKScore] = [scoreReporter]
GKScore.reportScores(scoreArray, withCompletionHandler: nil)
}
}
func gcAuthPlayer(){
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {
(view, error) in
if view != nil{
self.presentViewController(view!, animated: true, completion: nil)
}else{
print(GKLocalPlayer.localPlayer().authenticated)
}
}
}
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) {
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}
这个代码毫无意义
saveHighScore(GameScene().highScoreNumer)
showLeaderBoard()
if GameScene().currentScore > GameScene().highScoreNumer{
saveHighScor
每次你尝试更新分数时,你都会创建一个新的游戏场景实例,因此你的分数为零
我需要看到更多的代码,但现在你需要在游戏场景中更改score属性。例如,将其设置为静态属性,以便可以在其他类中获取它
class GameScene: SKScene {
static var currentScore = 0
static var highscoreNumber = 0
}
而不是在场景或ViewController中,您可以这样获得它
GameScene.currentScore = 5
GameScene.highscoreNumber = 5
请记住,每次重新启动游戏场景时,您都必须将分数重置为0,因为它是一个静态属性
GameScene.currentScore = 0
GameScene.highscoreNumber = 0
比你的代码张贴分数应该是这样的
saveHighScore(GameScene.highScoreNumer)
showLeaderBoard()
if GameScene.currentScore > GameScene.highScoreNumer{
saveHighScor
您的分数报告代码还应该处理错误,并实际执行完成处理程序。把它改成这样
/// Save leaderboard progress
func reportLeaderboardProgress(value: Int, leaderboardID: String) {
let scoreReporter = GKScore(leaderboardIdentifier: leaderboardID)
scoreReporter.value = Int64(value)
GKScore.reportScores([scoreReporter]) { error in // Trailing Closure syntax
if let error = error {
print(error.localizedDescription)
return
}
print("Reported leaderboard progress \(value) to leaderboardID \(leaderboardID)")
}
}
将该代码移动到另一个类中也是一个好主意,以保持总体代码更干净、更可重用。
要获得一个简单的示例,请在gitHub上查看此帮助程序
让我知道进展如何