Хорошо вот проблема:Renderer/Сортировка оптимизация
- у меня есть список объектов, которые действительно должны быть обновлены времени с момента последнего кадра
- список должны быть отсортированы по у koordinate объекта, прежде чем они получают рисовать
ток я сделать это с collection.sort и простой comperator:
figureComperator = new Comparator<Actor>() {
@Override
public int compare(Actor o1, Actor o2) {
return (int) o2.getY() - (int) o1.getY();
}
};
рендер выглядит так:
@Override
public void render(float delta) {
// clearing
Gdx.gl.glClearColor(0, 0, 0, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// act the character act in front
this.character.myAct(delta);
updateGameCam();
if (this.status == GameStatus.GAME) {
// just monster act now
this.figureStage.act();
}
this.figureStage.getActors().sort(figureComperator); // sort figures
// render background
this.map.drawBackground(); // draw background
// draw figures inclusive character
this.figureStage.draw(); //draw all figures
this.map.drawForeground(); // foreground
// render game HUD and act gameHud
this.gameHud.act(delta);
this.gameHud.draw();
}
Так я ищу лучший способ улучшить скорость этого.
Я натолкнулся на идею позволить актерам сортировать себя внутри списка (figureStage
), пока я их обновляю. Но поскольку я делаю обновление forall с this.figureStage.act();
, я не мог сделать это так просто.
Итак, мой вопрос в том, есть ли какое-либо решение, не имея сложности алгоритма сортировки, чтобы всегда иметь эти объекты, отсортированные по его положению?
Можете ли вы сохранить актеров в SortedSet, чтобы они всегда были отсортированы и никогда не должны быть полностью пересортированы? – Joni
Не уверен, потому что они меняют свои позиции y во время выполнения. – BennX
Как часто это происходит? – Joni