Sam*_*Sam 6 uiviewcontroller gamekit sprite-kit game-center-leaderboard swift
我一直在开发利用SpriteKit和斯威夫特一场比赛,但是我似乎无法决定的真正区别是什么之间GameViewController我和任何一个SKScene秒.我正在尝试理解这些差异,因为我想在我的游戏中实现GameCenter或本地排行榜,但在我找到的所有教程中(就像这一个:游戏中心排行榜!(Xcode中的Swift 2))他们拥有所有的逻辑GameViewController因为他们正在使用单一视图应用程序.当我阅读文档时,我无法理解这种关系,所以任何帮助都会很棒.最终,我希望能够在我的一个场景中显示和推送来自GameCenter的数据GameOverScene.谢谢你的帮助!
您的游戏中应该只有一个 GameViewController。SKScene 是游戏在到之间转换的场景。
例如,主菜单屏幕?那是一个 SKScene。主要玩法?那是一个 SKScene。游戏结束画面?那是一个 SKScene。
GameViewController 初始化游戏将在其中维护的整个视图,因此视图。SKScene 只是放置在视图顶部的场景。您应该查看使用 SKScene 的教程。
以下是如何使游戏中心从最新的 Swift 2.2 开始工作。
将此函数添加到 GameViewController 类中的任何位置,然后在 super.viewDidLoad() 之后立即调用它。
func authenticateLocalPlayer() {
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {(viewController, error) -> Void in
if (viewController != nil) {
self.presentViewController(viewController!, animated: true, completion: nil)
}
else {
print((GKLocalPlayer.localPlayer().authenticated))
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 SKScene 类文件中添加以下函数。不要忘记导入 GameKit。每当您想要显示排行榜时,只需调用 showLeader() 即可。
func showLeader() {
let viewControllerVar = self.view?.window?.rootViewController
let gKGCViewController = GKGameCenterViewController()
gKGCViewController.gameCenterDelegate = self
viewControllerVar?.presentViewController(gKGCViewController, animated: true, completion: nil)
}
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) {
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
这是我如何将分数保存到游戏中心的示例。
func saveHighscore(gameScore: Int) {
print("Player has been authenticated.")
if GKLocalPlayer.localPlayer().authenticated {
let scoreReporter = GKScore(leaderboardIdentifier: "YOUR_LEADERBOARD_ID")
scoreReporter.value = Int64(gameScore)
let scoreArray: [GKScore] = [scoreReporter]
GKScore.reportScores(scoreArray, withCompletionHandler: {error -> Void in
if error != nil {
print("An error has occured: \(error)")
}
})
}
}
Run Code Online (Sandbox Code Playgroud)
以下是一些很好的信息:
所以你看,SKScene是一个包含Nodes和Actions等所有有趣内容的类,并且是一切(对你很重要)发生的地方.您可以通过编辑器生成这些场景,但是您可能需要创建一个新的.swift文件(因为每个场景都有自己的逻辑).
编辑器只是初始化一堆东西的"捷径",老实说,你可以用很少的代码制作完整的游戏(但你很快发现你想要更多)
因此,在此代码中,您声明GameScene或PauseScreen(它们基本上只是类声明,继承自SKScene),您很快就会发现这一行谈论ISNT场景:
override func didMoveToView(view: SKView)..它正在调用SKView ......那是什么,它来自哪里?(在这里阅读SKView,看看它的继承):
我们在GameViewController文件中发现了这个SKView声明(这只是一个类),注意它与普通的iOS应用程序大致相同,因为它继承了UIViewController:
override func viewDidLoad() {
super.viewDidLoad()
if let scene = GameScene(fileNamed:"GameScene") {
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
Run Code Online (Sandbox Code Playgroud)
同样,该方法在GameViewController.swift中声明,基本上就是这样:
class GameViewController: UIViewController
基本上,从右到左,你有一个窗口,它是(如果错误的话,我是错误的)AppDelegate,然后是ViewController,然后是你的View,里面有很多很酷的东西(故事板位于View里面,就像SKScenes位于View ....标签,节点或按钮内,都位于各自的类中((视图)))
这都是继承的三明治.
查看Apple网站了解更多信息.
https://developer.apple.com/spritekit/
https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SpriteKitFramework_Ref/
基本上,一切都是继承自类继承的类的类,依此类推......它可能会变得混乱.你也可以通过CMD +点击它们在Xcode中看到这些遗产,这会将你跳转到源文件.
Goodluck与您在SpriteKit的学习和冒险:)
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |