我想从世界中删除所有实体。如果为实体注册了标签或组,我也想删除它们。就像根本没有这样的实体。它很像World.delete
函数,但你应该循环所有实体。我找不到办法。并且无法相信设计师没有准备这样的功能来清除世界上的实体。我错过了什么吗?
问问题
588 次
1 回答
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 是否会在删除时自动删除实体。
于 2014-10-23T09:16:36.703 回答