首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编程使用SKReferenceNode时出错

编程使用SKReferenceNode时出错
EN

Stack Overflow用户
提问于 2017-01-10 23:35:10
回答 1查看 259关注 0票数 0

我正计划制作一款游戏,游戏中屏幕被分成两半。这一半的每一个背景都会在玩家开始游戏的时候发生变化。

我想将我的背景设计成不同的.sks文件,然后通过编程方式将其中两个文件随机加载到我的GameScene中。

麻烦的是,sks内容被当作一个SKScene来处理,因此它显然不能作为我场景中的一个子类添加:

代码语言:javascript
复制
class GameScene: SKScene {
    override func didMove(to view: SKView) {
        let upperBackground = SKReferenceNode(fileNamed: "Caribbeans")!
        addChild(upperBackground)
    }
}

我想知道是否有一种方法可以让编译器将我的SKReferenceNode作为一个SKSpriteNode来对待,但是尝试降级并不有效,因为SKReferenceNode和SKSpriteNode是不相关的。

我知道,每当我创建一个更大的sks场景,拖动两个SKReferenceNodes,然后将它们的引用设置为单个背景时,它就能工作,但问题是,我想随机选择两个背景,每次变化,所以我必须找到一种方法,通过编程而不是通过场景编辑器来解决这个问题。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 22:11:50

正如我在另一篇文章中提到的,我找到了一个解决办法。

在我的例子中,我用一个SKReferenceNode替换了SKScene。

我首先确保,在我的.sks场景中,所有SKSpriteNodes都是一个主节点的子节点。它不必是一个直接的链接,你仍然可以尊重场景的层次结构,但重要的是,在“层次结构树”的末尾,它们被链接到一个节点,在我的例子中,这是背景,但它也可以是一个空节点。

然后在我的GameScene文件中,我编写了以下代码:

代码语言:javascript
复制
class GameScene: SKScene {
    var mainNode: SKNode? = nil
    override func didMove(to view: SKView) {
        var mySksScene = SKScene(fileNamed: "Caribbeans")
        mainNode = upperBackground?.childNode(withName: "backgroundCaribbean")
        mainNode?.removeFromParent()
        mySksScene = nil
        addChild(mainNode)
    }
}

我首先声明了一个可选的SKNode变量。然后,在didMove(:to:)中,我将.sks文件加载到一个可选的SKScene()变量中。然后,我将SKNode设置为主节点,该节点是所有其他节点的父节点(在我的例子中是: backgroundCaribbean)。然后,我从它的父场景中删除了我的mainNode,然后将包含.sks场景的变量设置为0,然后我将.sks添加为一个GameScene的子场景。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41580349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档