我有一个GameScene.sks,一个自定义类GameScene.swift,它是通过自定义类检查器(在Xcode中的右侧)连接的。这工作得很好。
现在,在我想引用另一个场景的GameScene.swift中,我想在未来的许多场景中重用它(过于简化的代码):
class GameScene: SKScene {
// ...
override func didMove(to view: SKView) {
//...
guard let gameMenuPath = Bundle.main.path(
forResource: "GameMenu", ofType: "sks") else { return }
let url = NSURL(fileURLWithPath: gameMenuPath) as URL
let gameMenu = SKReferenceNode(url: url)
addChild(gameMenu)
//...我正在加载一个可重用的GameMenu.sks。
在这里之前一切都很好。现在是GameMenu.sks (要重用的场景)的自定义类问题。对于GameMenu.sks,我还有一个GameMenu.swift,它在自定义类检查器中被引用为自定义类。所以和GameScene的情况完全一样。问题是似乎没有找到/加载GameMenu.swift。我没有得到错误-所以看起来我拼错了自定义类-但我检查了很多次,还清除了Xcode缓存。
你知道如何为一个场景(.sks)设置另一个场景中引用的自定义类吗?
我认为这是为可重用场景部分所做的事情,在我的例子中,suche是在每个GameScene中都可见的GameMenu。
谢谢你的任何提示。
发布于 2019-09-22 22:11:53
是否需要通过代码在GameScene中添加GameMenu?您也可以简单地使用检查器。在你的GameScene.sks中删除'Reference‘(SKReferenceNode)对象。从层次结构中选择它,然后在'reference‘下拉列表中选择GameMenu as。

发布于 2019-09-29 06:40:27
SKReferenceNodes的行为类似于节点,而不是场景,这可能会导致混淆,因为您正在创建场景文件。
这意味着视图对场景调用的任何函数都不会被调用。
如果需要调用这些函数中的一些函数,则需要手动执行。
看看这个例子,让你的didMoveToView启动:
override func didMove(to view: SKView) {
let gameMenu = SKReferenceNode(fileNamed:"GameMenu") as? SKScene // (or your custom class)
addChild(gameMenu)
gameMenu.didMove(to:view)
}https://stackoverflow.com/questions/58049817
复制相似问题