gpt4 book ai didi

swift - 以编程方式使用 SKReferenceNode 时出现问题

转载 作者:行者123 更新时间:2023-11-30 12:46:28 29 4
gpt4 key购买 nike

我计划制作一款街机游戏,其中屏幕分为两半。每次玩家开始游戏时,这半部分的背景都会有所不同。

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

问题在于 sks 内容被视为 SKScene,因此显然无法将其添加为我的场景的子级:

class GameScene: SKScene {
override func didMove(to view: SKView) {
let upperBackground = SKReferenceNode(fileNamed: "Caribbeans")!
addChild(upperBackground)
}
}

我想知道是否有办法让编译器将我的 SKReferenceNode 视为 SKSpriteNode,但尝试向下转换不起作用,因为 SKReferenceNode 和 SKSpriteNode 不相关。

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

有什么建议吗?

最佳答案

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

就我而言,我用 SKScene 替换了 SKReferenceNode。

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

enter image description here

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

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 场景的变量设置为 nil,然后才将 mainNode 添加为 GameScene 的子节点。

关于swift - 以编程方式使用 SKReferenceNode 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41580349/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com