2016-09-20 18 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ノードを削除する場合のシーンと、配列から要素を削除する方法を知っています。スプライトの1がこの場合

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) 

に触れたとき、私は、インデックスがわからない場合exempleについて、¿どのように私は私の配列SKSpriteNodespritesTreeからtouchedNodeを削除することができますか?私はindexOfについて前にインデックスを見つけるが、それは私のSKSpriteNode配列では機能しません。私を手伝ってくれますか?あなたは、各SKSpriteNodeの名前を作成することができます

答えて

0

カテゴリーで探す、:あなたはノードをチェックしたときに後

spritesTree[index].name = String(index) 

は、あなたが答えを

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

感謝をintに名前を変換触れたが、それはdidnの私の問題を完全に解決していません。私は位置と一致する以下のリストノード名["0"、 "1"、 "2"、 "3"、 "4"]を想像してみてください。名前が '2'の最初のアイテムを削除するとすべてが正常ですが、名前が '4'の_removeAtIndex_にしようとすると、アイテムが位置0 - > "0"、1 - > "1"、2 - > "3"、3 - > "4"となり、配列には "4"の位置はありません。名前からアイテムの位置を返す関数があるかどうか知っていますか? – Xavi

+0

ループの削除後にすべて名前を変更します。または、次のように配列にノードを見つけることができます:0のインデックスの場合... spritesTree.count {touchedNode == spritesTree [index] {spritesTree.removeAtIndex(index)}} – gabrielpf

関連する問題