所以我目前正在开发一个等距的基于图块的游戏,我正在使用拓扑排序来对要渲染的图块的顺序进行排序。那么,拓扑排序实际上决定了每个图块的深度,并且通过比较这些深度的比较器对要渲染的图块的arraylist进行排序。
我遇到的问题基本上是拓扑排序上的糟糕表现。我不确定是否有任何可能导致性能问题的遗漏。我非常感谢任何可用于优化拓扑排序的输入。
我在字段中存储了一些变量,我不确定这是否会提高性能。我也在使用公共字段进行比较。
相关代码段:
private void topological(Array<IsoSprite> sprites) {
for (int i = 0; i < sprites.size; ++i) {
a = sprites.get(i);
behindIndex = 0;
for(IsoSprite sprite: sprites){
if(sprite != a){
if (sprite.maxX > a.minX && sprite.maxY > a.minY && sprite.minZ < a.maxZ) {
if (a.behind.size <= behindIndex) {
a.behind.add(sprite);
behindIndex++;
} else {
a.behind.set(behindIndex++, sprite);
}
}
}
}
a.visited = false;
}
sortDepth = 0;
for (IsoSprite sprite : sprites) {
visitNode(sprite);
}
}
private void visitNode(IsoSprite sprite) {
if (!sprite.visited) {
sprite.visited = true;
Iterator<IsoSprite> it = sprite.behind.iterator();
while (it.hasNext()) {
visitNode(it.next());
it.remove();
}
sprite.isoDepth = sortDepth++;
}
}