如何操作精灵工具包的SKNode?

时间:2014-11-09 12:40:36

标签: swift sprite-kit skshapenode

我按如下方式编码了星空。现在我想在用户触摸它时移除一颗星。但是,以下代码会删除天空中的所有星星。如何访问单个星形节点来操作它?

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

}

1 个答案:

答案 0 :(得分:0)

在创建行星节点时为其命名,并在删除它时检查此名称。这将使您不会删除非行星的其他节点。

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

}