1

可以使用以下方法删除实体的组件:

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

如何从 SKScene 中删除实体?

有很多关于删除组件的教程,但我找不到任何关于删除实体的明确内容。有没有类似删除节点的东西?

node.removeFromParent();
4

1 回答 1

0

我改编自 Apple 的 DemoBots,其中包含RenderComponentLayerConfiguration的示例。

在此处使用 Swift 解决方案扩展数组 >>数组扩展以按值删除对象

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)
}
于 2017-06-30T21:53:56.820 回答