如何在SpriteKit中显示Game Center排行榜?



我对Swift很陌生,在游戏中执行排行榜时遇到了一些麻烦。

到目前为止,我能够在iTunes Connect中验证本地玩家并设置排行榜。

但是,我无法显示排行榜本身,如果我运行下面的代码,当我点击SKScene中的GK排行榜按钮时,它会中止。问题是我如何从SKScene显示GK排行榜?谢谢!

GameViewController.swift

import SpriteKit
import GameKit
class GameViewController: UIViewController, GKGameCenterControllerDelegate {
override func viewDidLoad() {

super.viewDidLoad()

let scene = SceneMenu(size: view.frame.size)
scene.scaleMode = .aspectFill
scene.backgroundColor = .white

let view = view as! SKView
view.presentScene(scene)
view.showsFPS = true
view.showsNodeCount = true
authenticateLocalPlayer()
}
func authenticateLocalPlayer() {

GKLocalPlayer.local.authenticateHandler = { viewController, error in

}

}
func showLeaderboard() {

let gcVC = GKGameCenterViewController(leaderboardID: "com.generic.leaderboard", playerScope: .global, timeScope: .allTime)
gcVC.gameCenterDelegate = self
present(gcVC, animated: true)

}
func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {

gameCenterViewController.dismiss(animated: true)

}
}

SceneMenu.swift

import SpriteKit
import GameKit
class SceneMenu: SKScene {
override init(size: CGSize) {

super.init(size: size)

let btnGK = SKLabelNode(text: "GameKit")
btnGK.name = "btn_gk"
btnGK.fontSize = 20
btnGK.fontColor = SKColor.blue
btnGK.fontName = "Avenir"
btnGK.position = CGPoint(x: size.width / 2, y: size.height / 2)
addChild(btnGK)

let btnLeaderboard = SKLabelNode(text: "GK Leaderboard")
btnLeaderboard.name = "btn_leaderboard"
btnLeaderboard.fontSize = 20
btnLeaderboard.fontColor = SKColor.blue
btnLeaderboard.fontName = "Avenir"
btnLeaderboard.position = CGPoint(x: size.width / 2, y: size.height / 2 - 50)
addChild(btnLeaderboard)

}
required init?(coder aDecoder: NSCoder) {

fatalError("init(coder:) has not been implemented")

}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

if let touch = touches.first {

let location = touch.location(in: self)
let action = atPoint(location)

switch action.name {

case "btn_gk":

print("btn_gk")

GKLeaderboard.submitScore(10, context: 0, player: GKLocalPlayer.local, leaderboardIDs: ["com.generic.leaderboard"]) { _ in }

case "btn_leaderboard":

print("btn_leaderboard")

GameViewController().showLeaderboard()

default:

print("nothing")

}

}

}
}

我现在不能提供任何代码,但你真正应该做的是使用像UIKit这样的东西为排行榜创建一个UIView,然后将其嵌入到SKScene中。

有一个类似SKView的接口,它是由一个UIView支持的,这使得这很容易做到。

将Sprite Kit用于游戏内容。对UI的东西使用UIKit。😃

最新更新