2015-12-03 85 views
2

我正在製作一款遊戲,隨着玩家的進行障礙物繼續出現在屏幕上。每當障礙物移動到相機視野之外時,它們就會被移除併產生新的物體。訪問for循環中創建的spritenodes?

我有一個這是在didMoveToView()調用一次函數,一旦在這裏面的update()功能if語句:

if theCamera.containedNodeSet().count < 2 {} 

這是函數:

func addNewBlocks(number: Int, playerPosition: CGPoint) { 


    if existingBlocks.count == 0 { 
     updatePointArray(number, playerPosition: playerPosition) 

     for index in 0...3 { 

      let block = Obstacle() 
      block.position = pointArray[index] 
      block.name = "block\(index)" 
      self.addChild(block) 
      existingBlocks.append(block) 
      print("adding blocks") 
     } 

    } else if existingBlocks.count > 0 { 
     for index in 0...3 { 
      self.childNodeWithName("block\(index)")?.removeFromParent() 
     } 
    } 
} 

它有兩個參數:一個數字 - 產生障礙的數字和當前玩家的位置。

我的問題是,在didMoveToView()最初添加障礙後,我無法消除障礙。 我做錯了什麼?

回答

0

嘗試使用這種去除不在屏幕上的節點:

func didSimulatePhysics() { 
self.enumerateChildNodesWithName(@"YOUR_NODE_NAME", usingBlock: { 
    (node: SKNode, stop: Bool) -> Void in 
    if !CGRectContainsPoint(CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height), node.position) { 
     node.removeFromParent() 
    } 
})} 
0

這個功能應該刪除所有不可見的節點。

private func removeNodesOutsideTheCamera() { 
    self.children 
     .filter { self.camera?.containedNodeSet().contains($0) == false } 
     .forEach { $0.removeFromParent() } 
}