Sprite kit GameViewController中unarchiveFromFile的方法用于什么?
当我试图在Swift中为游戏添加不同的场景时,我遇到了unarchiveFromFile方法。这个方法的问题是它只适用于GameSecene类。如果你从Sprite kit GameViewController中unarchiveFromFile的方法用于什么?,sprite-kit,viewcontroller,skscene,Sprite Kit,Viewcontroller,Skscene,当我试图在Swift中为游戏添加不同的场景时,我遇到了unarchiveFromFile方法。这个方法的问题是它只适用于GameSecene类。如果你从 extension SKNode { class func unarchiveFromFile(file : NSString) -> SKNode? { if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
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一起工作,我将所有出现的类GameSecene更改为SKScene。虽然它现在可以与其他SKScene类一起使用,但我仍然不明白它是什么
这是什么方法?我应该保留它吗?我没有太多地使用Xcode 6,但以下是我的理解(有人可能会纠正我或解释): 这就是你的应用程序如何利用游戏场景(或任何
SKScene
)的布局数据等。如果单击“项目导航器”面板中的GameSecene.sks文件,您将获得游戏场景的可视化编辑器
如果希望使用此布局数据,则可以使用该方法。您可以在场景编辑器中直观地布局游戏场景,而无需对位置、设置等进行编码。根据0x141E的注释,您可以将unarchiveFromFile方法更改为可用于不同的SKS或SKScene类:
extension SKNode {
class func unarchiveFromFile<T:SKScene>(file : NSString) -> T? {
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as T
archiver.finishDecoding()
return scene
} else {
return nil
}
}
}
我明白了,游戏中的一切都是动态的,所以我无法真正了解.sks文件的用途,只是简单地删除了它们。如果我决定使用它们,我会记住这一点。如果您仔细查看可以拖放到场景中的元素并修改给定元素的设置,我想您可能会发现它很有用。像发射器、弹簧、重力场、湍流场等,看起来很有希望,尽管在我的测试版中某些东西似乎不起作用。(或者我在设置方面遗漏了一些东西)如果你要开发愤怒的小鸟游戏,你可以从构建不同级别的代码开始。您需要设置背景,选择并定位要发射的鸟类,建造保护清管器的结构,并将清管器放置在适当的位置。想象一下,在100个级别的代码中完成这一切。苹果提供了一种通过SpriteKit模板和SpriteKit编辑器以图形方式设置关卡的方法。它们一起允许你将场景内容(GameSecene.sks)和游戏逻辑(GameSecene.m)分开。我理解。我打算尝试实现一个tilemap。使用sks文件创建游戏地图实用吗??
if let scene = GameScene.unarchiveFromFile("Level1Scene") as? GameScene {
...
if let scene = GameScene.unarchiveFromFile("Level2Scene") as? GameScene {
...