Search code examples
swiftsprite-kitskshapenode

How to manipulate a sprite kit's SKNode?


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

}

Solution

  • 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
    
    }