sprite-kit - GameViewController 中的 unarchiveFromFile 方法是做什么用的?

标签 sprite-kit viewcontroller skscene

当我尝试在 Swift 中为我的游戏添加不同的场景时,我遇到了 unarchiveFromFile 方法。这种方法的问题在于它只适用于 GameScene 类。如果你从

extension SKNode {
    class func unarchiveFromFile(file : NSString) -> SKNode? {
        if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
            var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil)
            var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)

            archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
            let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene 
            archiver.finishDecoding()
            return scene
        } else {
            return nil
        }
    }
}

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
             let skView = self.view as SKView
             skView.ignoresSiblingOrder = true
             skView.presentScene(scene)
        }
        // This won't work for MenuScene.unarchiveFromFile("MenuScene") as? MenuScene
        // nor MenuScene.unarchiveFromFile("MenuScene") as? GameScene

为了能够与其他 SKScene 一起工作,我将所有出现的类 GameScene 更改为 SKScene。虽然它现在适用于其他 SKScene 类,但我仍然不明白它是什么。

这个方法有什么用?我应该保留它吗?

最佳答案

我没有经常使用 Xcode 6,但这是我的理解(有人可能会纠正我或解释):

这就是您的应用如何利用 GameScene(或任何 SKScene)的布局数据等。如果您单击 Project Navigator 面板中的 GameScene.sks 文件,您将获得一个用于您的 GameScene 的可视化编辑器。

如果您希望使用此布局数据,则可以使用该方法。您可以在场景编辑器中直观地布置您的 GameScene,而无需编写位置、设置等代码。

关于sprite-kit - GameViewController 中的 unarchiveFromFile 方法是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25468013/

相关文章:

ios - 我怎样才能停止计时器?

ios - 在 Swift Sprite Kit 中拖放类型的东西?

ios - Swift - SKAction 序列有问题

Swift delegate 在 uiviewcontroller 和 uitableviewcontroller 之间进行通信

Swift - TabViewController 在其选项卡之一中带有 SwipeViewControler

swift - 在 Swift 中的 2 个 View Controller 之间传递数据

ios - 如何从 GameScene 中的 ViewController 调用方法

ios - 使用 SpriteKit 和内置物理引擎移动和跳跃 Sprite

ios14 Xcode 12 - 触摸 SwiftUI 对象时 Sprite 不显示,但触摸 SKScene 时可以工作

ios - 在 SpriteKit 中重置场景