以编程方式添加SKReferenceNode

jen*_*dan 4 sprite-kit skscene swift

我有2d级别,所以我把它分成更多的.sks文件.我有"GameScene",我可以通过拖放操作在场景编辑器中加入它们.它创建了SKReferenceNodes.我成功完成了这一切.但我想在代码中需要时懒洋洋地加载这些部分(据说这是一个很好的做法).我失败了.

这是代码的特殊部分:

if let nextPart = SKReferenceNode(fileNamed: "Scene2_city2") {
        if self.childNodeWithName("Scene2_city2") == nil {
            self.addChild(nextPart)
        }
    }
Run Code Online (Sandbox Code Playgroud)

"Scene2_city2"是.sks文件的名称,也是文件内的Scene名称.

运行代码我收到一个错误:

***终止应用程序由于未捕获的异常'无法添加正文,已存在于世界中',原因:'无法添加正文类型:表示对象:[名称:'Scene2_city2'框架:{{ - 0,-0},{1024 ,768}}锚:{0,0}],已经存在于一个世界中

这很奇怪,因为我在添加之前先检查一下.

问题:如何以编程方式将SKReferenceNode添加到SKScene中?

编辑:这是bitbucket上的简单示例项目.添加参考场景以进行点击.

coc*_*joe 9

我找到了一个解决方法,结果发现创建SKReferenceNode使用该URL方法时没有问题.例如:

let path = NSBundle.mainBundle().pathForResource("SpaceShip", ofType: "sks")
let spaceShip = SKReferenceNode (URL: NSURL (fileURLWithPath: path!))
addChild(spaceShip)
Run Code Online (Sandbox Code Playgroud)

我做了一点挖掘,它出现在7.3.1 vs 7.2.1中,当创建SKReferenceNode使用fileNamed它现在返回一个可选项.打开SKScene时,如果您尝试将其作为子项添加到现有场景中,那么您将获得当然会抛出错误的内容.

添加了一个快速的7.3测试项目https://github.com/cocojoe/SKReferenceNodeIssue/tree/workaround

请注意,您在Apple论坛上引用了我的帖子.我填写了一个月前的错误报告,根据过去的经验,这些可能需要一段时间才能看到.