2014-10-01 2 views
1

세계에서 모든 항목을 삭제하고 싶습니다. 엔티티에 태그 또는 그룹이 등록되어있는 경우 태그 또는 그룹도 제거하려고합니다. 그런 존재가 전혀 없었던 것처럼. World.delete 함수와 비슷하지만 모든 엔티티에서 루프해야합니다. 나는 길을 찾을 수 없다. 그리고 설계자가 세계를 조직에서 제거하기위한 기능을 준비하지 않았다고 믿을 수 없습니다. 내가 놓친 게 있니? 세계에서 모든 개체를 삭제 디폴트 방법이 없습니다Artemis - 세계에서 모든 항목을 삭제하는 방법

답변

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(); 
    } 
} 

을 아르테미스 - 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가 삭제시 엔티티를 자동으로 제거하는지 여부는 확실하지 않습니다.

관련 문제