Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 渲染器/排序优化_Java_Sorting_Optimization_Renderer - Fatal编程技术网

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

好的,问题是:

  • 我确实有一个对象列表,从最后一帧开始需要更新
  • 列表需要按对象的y坐标排序,然后才能绘制
  • 当前我使用collection.sort和一个简单的comperator执行此操作:

    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));
        }