创建排序实体系统

一个简单的 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);
        }
    }

}