gpt4 book ai didi

java - 渲染器/排序优化

转载 作者:行者123 更新时间:2023-12-01 14:04:03 25 4
gpt4 key购买 nike

好吧,问题是:

  1. 我确实有一个对象列表,自上一帧以来确实需要更新
  2. 在绘制之前,列表需要按对象的 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();
}

所以我正在寻找一种更好的方法来提高速度。

我确实想到了让 Actor 在列表(figureStage)内进行排序的想法,而我确实更新了这些。但当我使用 this.figureStage.act(); 进行更新时,我无法做到那么容易。

所以我的问题是,是否有任何解决方案没有排序算法的复杂性来始终按其位置对这些对象进行排序?

最佳答案

您可以将对象存储在尺寸为 HEIGHT 元素的数组(或列表)中,其中 HEIGHT 是世界的垂直尺寸。该列表中的每个元素都是具有相应 Y 坐标的对象列表。当对象向上或向下移动时,应将其从一个列表中删除,并根据其新的 Y 坐标将其添加到另一个列表中。这样您就可以迭代数组并绘制内部列表中的所有对象。如果 Y 坐标不是整数,您可以使用它的整数部分。希望这会有所帮助。

关于java - 渲染器/排序优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19078610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com