0

I have coded a starry sky as follows. Now I would like to remove a star when a user touches it. The following code however removes all the stars on the sky. How can I access a single star node to manipulate it?

override func didMoveToView(view: SKView) {
    for(var i = 0; i < stars ; i++) {
        planetsLayer.addChild(createPlanet(view))
    }
    self.addChild(planetsLayer)       
}


override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */        
    for touch in touches {
        let location = touch.locationInNode(planetsLayer)
        let touchedLayer = nodeAtPoint(location)
        let touchedNode = nodeAtPoint(location)
        touchedNode.removeFromParent()
    }
func createPlanet() -> SKShapeNode {
   ...
    var shapeNode = SKShapeNode();
   ...
    return shapeNode

}
user3673836
  • 591
  • 1
  • 9
  • 23

1 Answers1

0

Give your planet nodes a name when you create them, and check for this name when you remove them. This will keep you from deleting other nodes that are not planets.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */        
    for touch in touches {
        let location = touch.locationInNode(planetsLayer)
        let touchedNode = nodeAtPoint(location)
        if touchedNode.name == "planet" {
            touchedNode.removeFromParent()
        }
    }
}

func createPlanet() -> SKShapeNode {
   ...
    var shapeNode = SKShapeNode()
    shapeNode.name = "planet"
   ...
    return shapeNode

}
vacawama
  • 150,663
  • 30
  • 266
  • 294