2017-01-28 72 views
1

組件可以被刪除?如何刪除實體形成實體的SKScene

有很多關於刪除組件的教程,但我找不到任何關於刪除實體的明確信息。有沒有像刪除節點?

node.removeFromParent(); 
+0

這完全取決於你如何存儲並引用'entity'情況延長。如果你想停止更新一個實體,只是不要調用它的'update'方法。 '.removeFromParent'方法允許您從Sprite Kit管理的SpriteKit節點樹中刪除一個節點。管理GKEntities取決於您的自定義代碼 - 例如實體可以存儲在一個數組中並從中移除 – Benzi

+0

謝謝,tej實體在一個Set中管理並添加到場景中,我可以從Set中移除實體後它已添加到場景中,但無法從中刪除現場直接,雖然我可以刪除它的所有組件 – dancingbush

+0

我有近兩個星期試圖解決同樣的問題。你有沒有找到解決方案? – iOSTony

回答

0

我適應這個從包含樣品的RenderComponentLayerConfiguration蘋果DemoBots。

陣列是用在這裏迅速解決>>Array extension to remove object by value

var entities = [GKEntity]() 

/// Stores a reference to the root nodes for each world layer in the scene. 
var layerNodes = [LayerConfiguration:SKNode]() 

func addEntity(entity: GKEntity) 
{ 
    self.entities.append(entity) 

    for componentSystem in self.componentSystems 
    { 
     componentSystem.addComponent(foundIn: entity) 
    } 

    // If the entity has a `RenderComponent`, add its node to the scene. 
    if let renderNode = entity.component(ofType: RenderComponent.self)?.node 
    { 
     self.addNode(node: renderNode, toLayer: .actors) 
    } 
} 

func removeEntity(entity:GKEntity) 
{ 
    for componentSystem in self.componentSystems 
    { 
     componentSystem.removeComponent(foundIn: entity) 
    } 

    if let renderNode = entity.component(ofType: RenderComponent.self)?.node 
    { 
     renderNode.removeFromParent() 
    } 

    self.entities.remove(entity) 
} 

func addNode(node: SKNode, toLayer layer: LayerConfiguration) 
{ 
    // 
    let layerNode = self.layerNodes[layer]! 

    layerNode.addChild(node) 
}