我想从世界中删除所有实体。如果为实体注册了标签或组,我也想删除它们。就像根本没有这样的实体。它与World.delete
函数非常相似,但您应该遍历所有实体。我找不到办法。并且无法相信设计师没有准备这样的功能来从实体中清除世界。我想念一下吗?
答案 0 :(得分: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是否会在删除时自动删除实体。