【问题标题】:How do I link a .sks file to a .swift file in SpriteKit如何将 .sks 文件链接到 SpriteKit 中的 .swift 文件
【发布时间】:2015-02-23 23:42:10
【问题描述】:

我看到在 XCode 6 中有一个内置的关卡编辑器。我找不到很多关于如何使用它或它如何工作的文档,但我能够弄清楚如何使用它来制作 SKSpriteNodes,然后使用 childNodeWithName() 将它们链接到 .swift 文件。当你创建一个新的 SpriteKit 项目时,它以 GameScene.swift 和 GameScene.sks 开始。我可以使用它们在视觉上制作一个关卡,然后我可以在 GameScene.swift 中为它编写代码,但是当我尝试为新关卡制作自己的 .sks 和 .swift 文件时,我无法连接 .sks以及我制作的 .swift 文件。我尝试完全按照本教程进行操作:

http://www.techotopia.com/index.php/An_iOS_8_Swift_Sprite_Kit_Level_Editor_Game_Tutorial#Creating_the_Archery_Scene

当我连接这两个文件时,没有出现任何错误,然后当我转换到场景时,它正确地转换了,但是我在模拟器中添加的任何视觉上的 .sks 都没有出现。请帮忙,我花了几个小时研究解决方案。我能找到的关于关卡编辑器的极少数教程和论坛只讨论了以新 SpriteKit 项目开头的 GameScene.swift 和 .sks。

【问题讨论】:

标签: swift sprite-kit xcode6


【解决方案1】:

此方法将解压缩 sks 文件并将其初始化为调用它的任何 SKNode 子类。这意味着您可以将文件解压缩为 SKNode(因此根节点将是 SKNode)并将其作为子节点添加到场景中。您还可以将文件解压缩为 GameScene 或任何 SKNode 子类。

extension SKNode {
    class func unarchiveFromFile(file : NSString) -> SKNode? {
        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 SKNode
            archiver.finishDecoding()
            return scene
        } else {
            return nil
        }
    }
}

像这样使用它:

let scene = GameScene.unarchiveFromFile("GameScene")! as GameScene

let levelStuff = SKNode.unarchiveFromFile("Level 1")!
self.addChild(levelStuff)

【讨论】:

  • 如果我的问题已经得到解答,我很抱歉。我确实阅读了 rickster 链接的那个论坛帖子,但它并不完全是我想要的。我使用了:let levelStuff = SKNode.unarchiveFromFile("Level 1")! self.addChild(levelStuff) 将节点从我的 .sks 添加到我的场景。我现在可以使用代码控制视觉添加的节点。我打算用它来制作静态平台,然后使用代码添加我的“英雄”。非常感谢您对我的帮助,这是一个简单的修复,现在我可以轻松地为我正在制作的游戏制作和设计新的关卡。
  • 另外,这是我第一次使用任何类型的论坛,所以如果我没有按照他们应该做的那样做事,我很抱歉
  • 如果这个答案解决了你的问题,你会考虑接受它(点击绿色勾号)
【解决方案2】:

到此答案(Xcode 8.2.1)时,为场景执行此操作的“简单”方式:

  • 在项目导航器中选择 .sks 文件,以便显示图形编辑器
  • 转到实用程序区域(在右侧)
  • 点击自定义类选项卡(图标看起来像一张联系人卡片)
  • 在“自定义类”中,在 .swift 文件中输入类的名称

【讨论】:

  • 谢谢,但是这不能用于 ShapeNode。以防万一有人想做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
相关资源
最近更新 更多