1

我有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另一个场景中引用的场景()设置自定义类?

我认为这是为可重复使用的场景部分所做的事情,例如GameMenu在我的情况下,在每个GameScene.

谢谢你的任何提示。

4

2 回答 2

1

是否需要通过代码在 GameScene 中添加 GameMenu?您也可以简单地使用检查器。在您的 GameScene.sks 中放置“参考”(SKReferenceNode)对象。从层次结构中选择它,然后在“参考”下拉列表中选择 GameMenu。

在此处输入图像描述

于 2019-09-22T14:11:53.453 回答
0

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)
 }
于 2019-09-28T22:40:27.250 回答