2017-01-28 31 views
1

компоненты сущностей могут быть удалены с помощью:Как удалить Entity сформировать SKScene

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

Как Сущности удалены из SKScene?

Существует множество учебных пособий по удалению компонентов, но я не могу найти ничего конкретного об удалении объектов. Есть что-то вроде удаления узла?

node.removeFromParent(); 
+0

Это полностью зависит от того, как хранить и ссылаться на 'entity' экземпляра. Если вы хотите прекратить обновление объекта, просто не вызывайте его метод 'update'. Метод '.removeFromParent' позволяет удалить узел из дерева узлов SpriteKit, которым управляет Sprite Kit. Управление GKEntities выполняется до вашего пользовательского кода - например, объекты могут быть сохранены в массиве и удалены из них – Benzi

+0

Спасибо, тедж-объекты управляются в наборе и добавляются в сцену, я могу удалить объект из набора после его добавления в сцену, но не может удалить из сцена сразу, хотя я могу удалить все ее компоненты – dancingbush

+0

У меня есть почти две недели, пытаясь решить ту же проблему. Вы когда-нибудь находили решение? – iOSTony

ответ

0

Я приспособил это от DemoBots Apple, который содержит образцы для RenderComponent и LayerConfiguration.

массив был расширен с помощью Swift решения здесь >>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) 
}