建立排序實體系統
一個簡單的
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);
}
}
}