Как манипулировать SKNode набора спрайтов?

Я закодировал звездное небо следующим образом. Теперь я хотел бы удалить звезду, когда пользователь прикасается к ней. Однако следующий код удаляет все звезды с неба. Как я могу получить доступ к одному звездному узлу, чтобы манипулировать им?

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

}

person user3673836    schedule 09.11.2014    source источник


Ответы (1)


Дайте узлам вашей планеты имя при их создании и проверяйте это имя при их удалении. Это убережет вас от удаления других узлов, не являющихся планетами.

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

}
person vacawama    schedule 09.11.2014