Java 渲染器/排序优化
好的,问题是:Java 渲染器/排序优化,java,sorting,optimization,renderer,Java,Sorting,Optimization,Renderer,好的,问题是: 我确实有一个对象列表,从最后一帧开始需要更新 列表需要按对象的y坐标排序,然后才能绘制 当前我使用collection.sort和一个简单的comperator执行此操作: figureComperator = new Comparator<Actor>() { @Override public int compare(Actor o1, Actor o2) { return (int) o2.getY() - (int) o1.get
figureComperator = new Comparator<Actor>() {
@Override
public int compare(Actor o1, Actor o2) {
return (int) o2.getY() - (int) o1.getY();
}
};
因此,我正在寻找一种更好的方法来提高速度
我确实想到了让演员自己在列表中排序的想法(figureStage
),而我会更新这些。但是当我使用this.figureStage.act()对所有文件进行更新时代码>我做不到那么容易
因此,我的问题是,如果有任何解决方案没有排序算法的复杂性,总是让这些对象按其位置排序?在@Joni的帮助下,我开始使用不同的算法对参与者进行排序。仅通过使用insertionsort,它就将排序速度提高了约2-3倍
public void sortList(Array<Actor> array) {
// double starttime = System.nanoTime();
for (int i = 1; i < array.size; i++) {
Actor temp = array.get(i);
int j = i - 1;
while (j >= 0 && array.get(j).getY() < temp.getY()) {
array.set(j + 1, array.get(j));
j--;
}
array.set(j + 1, temp);
}
// System.out.println("Time taken: " + (System.nanoTime() - starttime));
}
public void排序列表(数组){
//double starttime=System.nanoTime();
for(int i=1;i=0&&array.get(j.getY()
Collection.sort的平均ns约为8700。插入量大约是3300 您可以将对象存储在大小为的高度元素数组(或列表)中,其中高度是世界的垂直大小。此列表中的每个元素都是具有相应Y坐标的对象列表。
当对象上下移动时,应将其从一个列表中删除,并根据其新的Y坐标添加到另一个列表中。
这样,您就可以迭代数组并在内部列表中绘制所有对象。
如果Y坐标不是整数,可以使用它的整数部分。
希望这能有所帮助。你能将演员保留在一个分类集中,这样他们就可以一直被分类,而不必完全重新分类吗?不确定,因为他们在运行时确实会改变y位置。这种情况发生的频率有多高?对怪物进行分类会花费很长时间,以至于对每一帧进行排序都是一个问题吗?如果它们之间没有太多的更改顺序,那么你可以考虑一种不同的算法,例如,插入排序对于接近排序的数据来说需要接近线性时间。你确定将演员排序是你的性能瓶颈吗?您可能应该对应用程序进行概要分析,以便更深入地了解性能。
public void sortList(Array<Actor> array) {
// double starttime = System.nanoTime();
for (int i = 1; i < array.size; i++) {
Actor temp = array.get(i);
int j = i - 1;
while (j >= 0 && array.get(j).getY() < temp.getY()) {
array.set(j + 1, array.get(j));
j--;
}
array.set(j + 1, temp);
}
// System.out.println("Time taken: " + (System.nanoTime() - starttime));
}