建立排序實體系統

一個簡單的 EntitySystem,按照 comparator 指定的順序處理給定系列的每個實體,並在每次更新 EntitySystem 時為每個實體呼叫 processEntity()。這實際上只是一個便利類,因為渲染系統傾向於以排序的方式迭代實體列表。新增實體將導致實體列表被使用。如果你更改了排序標準,請撥打 forceSort()。有關詳細資訊,請參閱 SortedIteratingSystem

在下面的程式碼示例中,最好的用法是通過 zindex 按排序順序呈現精靈。

public class SpriteComponent implements Component {
     public TextureRegion region;
     public int z = 0;
}

public class Mapper {
     public static ComponentMapper<SpriteComponent> sprite = ComponentMapper.getFor(SpriteComponent.class);
}

public class RenderingSystem extends SortedIteratingSystem {

    public RenderingSystem () {
         super(Familly.all(SpriteComponent.class).get(), new ZComparator())
    }

    public void processEntity(Entity entity, float deltaTime) {
         if(checkZIndexHasChangeValue()) {
              forceSort();
         }
    }

    private static class ZComparator implements Comparator<Entity> {
        @Override
        public int compare(Entity entityA, Entity entityB) {
            return (int)Math.signum(Mapper.sprite.get(entityA).z - Mapper.sprite.get(entityB).z);
        }
    }

}