2017-01-28 3 views
1

コンポーネントで除去することができるどのようにエンティティを削除するフォーム:エンティティのSKScene

entity.removeComponentForClass(SpriteComponent.self); 
entity.removeComponentForClass(PhysicsComponent.self); 

はどのエンティティがSKSceneから削除されますか?

コンポーネントを削除するためのチュートリアルはたくさんありますが、エンティティの削除について明示的には見つかりません。ノードを削除するようなものはありますか?

node.removeFromParent(); 
+0

これは完全にあなたが 'entity'インスタンスを保存し、参照する方法によって異なります。エンティティの更新を停止したい場合は、 'update'メソッドを呼び出さないでください。 '.removeFromParent'メソッドはSpriteKitのノードツリーからノードを削除することができます。これはSprite Kitが管理します。 GKEntitiesを管理することで、カスタムコードが改善されます。エンティティは配列に格納され、それらから削除される – Benzi

+0

ありがとう、tejエンティティはセットで管理され、シーンに追加され、エンティティを削除することができます。シーンを直接、私はすべてのコンポーネントを削除することができます – dancingbush

+0

私はほぼ同じ問題を解決しようとしています。あなたは解決策を見つけましたか? – iOSTony

答えて

0

私はRenderComponentLayerConfigurationのためのサンプルが含まれているAppleの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) 
} 
関連する問題