1
删除所有实体我想删除从世界上所有的实体。如果一个标签或一个组织已经注册实体,我也想删除它们。就像根本没有这样的实体一样。它很像World.delete
函数,但是您应该循环所有实体。我找不到方法。并不能相信设计师没有准备这样的功能来从实体中清除世界。我想念什么?阿蒂米斯 - 如何从世界
删除所有实体我想删除从世界上所有的实体。如果一个标签或一个组织已经注册实体,我也想删除它们。就像根本没有这样的实体一样。它很像World.delete
函数,但是您应该循环所有实体。我找不到方法。并不能相信设计师没有准备这样的功能来从实体中清除世界。我想念什么?阿蒂米斯 - 如何从世界
有来自世界删除所有实体没有默认的方式 - 通常这是通过设置并重新创建世界做 - 但它可以通过添加自定义的经理可以轻松实现:
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是否会在删除后自动删除实体。