Как вы добавляете несколько узлов в сцену и перемещаете их все сразу. скор. комплект спрайтов

Я новичок в swift и spriteKit. Я создаю игру с прокруткой. Я хочу, чтобы он добавлял несколько узлов (называемых Impenitrible) с правой стороны экрана на любой высоте и перемещался влево. Моя функция создания узла «Impenitrible»:

func spawnImpenitrible(){ Impenitrible.physicsBody = SKPhysicsBody(rectangleOfSize: Impenitrible.size) let actionDone = SKAction.removeFromParent() var MinValue = sand.size.height var MaxValue = self.size.height - Impenitrible.size.height / 2 var spawnPoint = UInt32(MaxValue - MinValue) Impenitrible.position = CGPoint(x: self.size.width - 60 , y: CGFloat(arc4random_uniform(spawnPoint))) Impenitrible.physicsBody?.categoryBitMask = physicsCategory.impenitrible Impenitrible.physicsBody?.contactTestBitMask = physicsCategory.sub Impenitrible.physicsBody?.affectedByGravity = false Impenitrible.physicsBody?.dynamic = true self.addChild(Impenitrible) } 

Я вызываю эту функцию с помощью:

 var impenitribleTimer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("spawnImpenitrible"), userInfo: nil, repeats: true) 

Я перемещаю его, вычитая число из позиции x в функции «Обновить».

Он отлично работает, добавляя один раз. но как только он снова вызывает эту функцию, приложение вылетает с ошибкой:
Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «Придется добавить SKNode, у которого уже есть родитель, где я ошибся? Любая помощь будет замечательной! Спасибо.

Во-первых, я хочу указать, что ваша строка кода: let actionDone = SKAction.removeFromParent() фактически бесполезен, потому что вы никогда не вызываете runAction чтобы использовать его.

Сообщение об ошибке суммирует его довольно хорошо. Msgstr "Попытка добавить SKNode, у которого уже есть родительский элемент". Вы никогда не называете removeFromParent() .

Добавление Impenitrible однажды прекрасно работает, как вы узнали, потому что в начале Impenitrible не имеет родителя. Последующие вызовы будут иметь конфликт, потому что у Impenitrible уже есть родитель, который был добавлен с помощью первого вызова.

Быстрое и грязное исправление – сделать runAction(SKAction.removeFromParent()) перед следующим вызовом spawnImpenitrible , где-то, ссылаясь на Imprenitrible .

  • вопросы конфиденциальности с камерой и библиотекой фотографий в быстрой
  • Перемещение кадра WKWebview приводит к тому, что часть его становится невосприимчивой
  • UITableViewCell выглядит во время работы по-разному, чем в InterfaceBuilder (на iPad)
  • Увеличьте скорость до Xcode Builds (только с помощью команд терминала)
  • Я выполнил вход google в приложение ios. Теперь, как я могу проверить, зарегистрирован ли пользователь, а если нет - верните его на страницу входа с помощью Swift?
  • Ошибка сохранения пользовательского класса в NSUserDefault
  • Swift: как предотвратить нежелательные отклонения UITableViewCells во время прокрутки
  • NSRangeException - невозможно удалить наблюдателя
  • Невозможно переопределить свойство делегата в Swift
  • Создать pdf-файл для просмотра всех данных
  • Тема 1: EXC_BAD_INSTRUCTION Swift 2
  • Давайте будем гением компьютера.