【问题标题】:How to Remove an Entity form a SKScene如何从 SKScene 中删除实体
【发布时间】:2017-01-28 14:51:05
【问题描述】:

可以通过以下方式删除实体的组件:

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

如何从 SKScene 中删除实体?

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

node.removeFromParent();

【问题讨论】:

  • 这完全取决于您如何存储和引用entity 实例。如果您希望停止更新实体,请不要调用其update 方法。 .removeFromParent 方法允许您从 SpriteKit 管理的 SpriteKit 节点树中删除一个节点。管理 GKEntities 取决于您的自定义代码 - 例如实体可以存储在数组中并从中删除
  • 谢谢,tej实体在集合中管理并添加到场景中,我可以将实体添加到场景后从集合中移除,但不能直接从场景中移除,虽然我可以删除它的所有组件
  • 我有将近两个星期的时间试图解决同样的问题。你找到解决方案了吗?
  • 不,从来没有,项目在 tej 分钟被搁置,但从未得到它,当它应该被删除时,因为引用被保存在某个实体的某个地方而不断崩溃

标签: swift sprite-kit entities amazon-ecs gameplay-kit


【解决方案1】:

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

在这里使用 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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多