2014-10-01 66 views
1

删除所有实体我想删除从世界上所有的实体。如果一个标签或一个组织已经注册实体,我也想删除它们。就像根本没有这样的实体一样。它很像World.delete函数,但是您应该循环所有实体。我找不到方法。并不能相信设计师没有准备这样的功能来从实体中清除世界。我想念什么?阿蒂米斯 - 如何从世界

回答

2

有来自世界删除所有实体没有默认的方式 - 通常这是通过设置并重新创建世界做 - 但它可以通过添加自定义的经理可以轻松实现:

public final class EntityTracker extends Manager { 
    private Bag<Entity> entities = new Bag<Entity>(); 

    @Override 
    public void added(Entity e) { 
     entities.add(e); 
    } 

    @Override 
    public void deleted(Entity e) { 
     entities.remove(e); 
    } 

    public void deleteAllEntities() { 
     for (Entity e : entities) 
      e.deleteFromWorld(); 
    } 
} 

在最近版本的ARTEMIS-ODB它更容易使用AspectSubscriptionManager:

IntBag entities = world.getAspectSubscriptionManager() 
     .get(Aspect.all()) 
     .getEntities(); 

    int[] ids = entities.getData(); 
    for (int i = 0, s = entities.size(); s > i; i++) { 
     world.delete(ids[i]); 
    } 

编辑:上面的代码假定artemis-odb;我不确定vanilla artemis的TagManager和GroupManager是否会在删除后自动删除实体。