SKNode! не конвертируется в «SKNode»

#ios #swift #sprite-kit #sknode

#iOS #swift #sprite-kit #sknode

Вопрос:

У меня возникла эта проблема, и я не могу ее решить, я действительно не понимаю документацию по развертыванию переменных

 var ladybug: SKNode = SKNode.childNodeWithName("ladybug")
  

Ошибка: (строка!) -> SKNode! не конвертируется в «SKNode»

Спасибо

Ответ №1:

childNodeWithName это не метод класса. Вы вызываете его в экземпляре, а не в SKNode самом классе.

Если вы пишете этот код внутри SKScene подкласса, экземпляр, для которого вы хотите вызвать этот метод, может быть self .

Ответ №2:

Метод работает нормально:

 var sprite = SKNode()
var ladybug: SKNode! = sprite.childNodeWithName("ladybug")
  

Но вам нужно вызвать метод для экземпляра SKNode, а не для самого SKNode.

Комментарии:

1. это был просто пример, показывающий, что вы должны использовать экземпляр ok SKNode. Как сказал Рикстер, если вы находитесь внутри класса SKScene, вы можете попробовать self.childNodeWithName("ladybug")

2. В этом ответе используется пустой SKNode, созданный только для иллюстрации. Если у вас инициализирован фактический SKNode И этот узел имеет дочерний узел с именем «ladybug», он должен работать просто отлично.

Ответ №3:

childNodeWithName возвращает необязательный SKNode!. Используйте вывод типа и помните, что вы должны извлечь узел из его родительского элемента (обычно self, SKScene)

 let ladybug = self.childNodeWithName("ladybug")
  

И вот на что это похоже, когда вы создаете спрайт

 let ladybug = SKSpriteNode(ImageNamed:"ladybug.png")
labybug.name = "ladybug"
self.addChild(ladybug)
  

Попробуйте использовать let вместо var для объектов. Вы можете без проблем изменить его свойства, но лучше использовать константы.