2015-07-12 79 views
0

在我的游戏中,我有一种方法降低精灵。当用户丢失(gameStarted == false)时,我需要一种方法来删除我带入场景的所有这些节点。我试图通过简单地说出ball.removeFromParent()和使用底部的removeBalls函数两种方式来移除这些节点。两种方法都阻止未来的球进入现场,但并没有消除已经存在的球。如果有人有办法做到这一点,我会非常感激。删除存在的所有节点

override func didMoveToView(view: SKView) { 
var create = SKAction.runBlock({() in self.createTargets()}) 
var wait = SKAction.waitForDuration(2) 
var createAndWaitForever = SKAction.repeatActionForever(SKAction.sequence([create, wait]) 
self.runAction(createAndWaitForever) 


} 
     func createTargets() { 

      ball = SKSpriteNode(imageNamed:"blueBlue") 

       let randomx = Int(arc4random_uniform(370) + 165) 
       ball.position = CGPoint(x: randomx, y: 1400) 
       addChild(ball) 

       let moveDown = SKAction.moveBy(CGVector(dx: 0, dy: -1300), duration: 7) 



      if gameStarted == false { 

       ball.removeAllActions() 

       ball.removeFromParent() 

       removeBalls([ball]) 
      } 

      if gameStarted && spawnReady { 

       ball.runAction(moveDown) 

       if ball.parent == nil { 

        addChild(ball) 
       }  
      } 
      } 

func removeBalls(balls : [SKSpriteNode]) { 

      for ball in balls { 

      ball.removeFromParent() 
      } 
     } 

回答

1

你在哪里保持每个的轨道?你有一个阵列?

这样做:

  1. 提供一个名称的ball节点,说 “球”
  2. 枚举

斯威夫特

self.enumerateChildNodesWithName("ball", usingBlock: { 
    (node: SKNode!, stop: UnsafeMutablePointer <ObjCBool>) -> Void in 
    node.removeFromParent() 
}) 

对象 -

[self enumerateChildNodesWithName:@"ball" usingBlock:^(SKNode *node, BOOL *stop) { 
    [node removeFromParent]; 
}];` 
+0

嗨,谢谢你的回复。我没有一个数组来跟踪我的节点。我想尝试你的代码,但不幸的是我无法将它翻译成swift。 –