优化拓扑排序

时间:2015-06-13 22:46:24

标签: java algorithm sorting libgdx topological-sort

所以我目前正在开发一个等距的基于图块的游戏,我正在使用拓扑排序来对要渲染的图块的顺序进行排序。那么,拓扑排序实际上决定了每个图块的深度,并且通过比较这些深度的比较器对要渲染的图块的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++;
    }
}

0 个答案:

没有答案