1

世界からすべてのエンティティを削除したい。また、エンティティにタグやグループが登録されている場合は、それらも削除したいと考えています。そのような実体はまったくなかったように。関数によく似てWorld.deleteいますが、すべてのエンティティをループする必要があります。方法が見つかりません。そして、デザイナーがエンティティから世界を一掃するためのそのような機能を準備しなかったとは信じられません. 私は何かが恋しいですか?

4

1 に答える 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 を想定しています。バニラ アルテミスの TagManager と GroupManager が削除時にエンティティを自動的に削除するかどうかはわかりません。

于 2014-10-23T09:16:36.703 に答える