2016-09-20 2 views
1

Я работаю над маленькой игрой для iOS (spritekit/swift).удалить узел из массива spritekit swift

Я массив SKSpriteNode в моей сцене определяется следующим образом:

var spritesTree = [SKSpriteNode]() 

я заполнить массив с помощью функции и добавить их к сцене, как это:

spritesTree = spritesCollectionTree(count: numTrees) 
    for sprite in spritesTree { 
     addChild(sprite) 
    } 

После этого в зависимости от ситуации процесс добавляет еще несколько деревьев в массив. Я знаю, как удалить элементы из сцены и массива, если я знаю, что индексировать

  spritesTree[i].removeFromParent() 
      spritesTree.removeAtIndex(i) 

, но моя проблема заключается в удаление especific узла в этом массиве, когда я не знаю, индекса. Для Exemple, когда один из спрайта была затронута

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 

    for touch in (touches as! Set<UITouch>) { 

     let location = touch.locationInNode(self) 
     let positionInScene = touch.locationInNode(self) 
     let touchedNode = self.nodeAtPoint(positionInScene) 

В этом случае ¿Как я могу удалить touchedNode из моего массива spritesTree из SKSpriteNode, если я не знаю, индекс? Я прочитал что-то около indexOf, чтобы найти индекс previoustly, но он не работает с моим массив SKSpriteNode. Не могли бы вы мне помочь, пожалуйста?

Bests,

ответ

0

Вы можете создать имя для каждого SKSpriteNode:

spritesTree[index].name = String(index) 

После, когда вы проверяете узел прикоснулся конвертирование имени Int

let location = touch.locationInNode(self) 
    let positionInScene = touch.locationInNode(self) 
    let touchedNode = self.nodeAtPoint(positionInScene) 
    var index = Int(touchedNode.name) 
    touchedNode.removeFromParent() 
    spritesTree.removeAtIndex(index) 
+0

Спасибо за ответ, но Бесполезный Я полностью решу свою проблему. Представьте, что у меня есть следующие имена узлов списка ["0", "1", "2", "3", "4"], которые соответствуют позициям. Когда я удаляю первый элемент с именем «2», все в порядке, но если я попытаюсь _removeAtIndex_ с именем «4», он терпит неудачу, потому что элементы были реорганизованы с позициями 0 -> «0», 1 -> «1», 2 -> «3», 3 -> «4», и теперь в массиве нет «4» позиции. Вы знаете, есть ли какая-либо функция, которая возвращает позицию позиции из имени? – Xavi

+0

переименовать все после удаления в цикле. Или вы можете попытаться найти узел в массиве следующим образом: для индекса в 0 ... spritesTree.count {if touchedNode == spritesTree [index] {spritesTree.removeAtIndex (index)}} – gabrielpf

Смежные вопросы