さて、問題は次のとおりです。
- 最後のフレームからの時間までに更新する必要があるオブジェクトのリストがあります
- 描画する前に、オブジェクトの y 座標によってリストを並べ替える必要があります。
現在、私はこれを collection.sort と単純なコンパレータで行います:
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
アクターを list( ) 内でソートしながら、アクターを更新するというアイデアに出くわしました。しかし、私は forall で更新をthis.figureStage.act();
行うので、それほど簡単にはできませんでした。
だから私の質問は、常にそれらのオブジェクトをその位置でソートするためのソートアルゴリズムの複雑さを持たない解決策があるかどうかです?