SpriteKit Scene, на который ссылается SKReferenceNode, не загружает пользовательский класс - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть 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.

СпасибоВам за любые намеки.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

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)
 }
0 голосов
/ 22 сентября 2019

Нужно ли добавлять GameMenu в GameScene через код?Вы также можете просто использовать инспектора.В ваших GameScene.sks удалите объект 'Reference' (SKReferenceNode).Выберите его в иерархии и выберите GameMenu, как в раскрывающемся списке «Справочник».

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...