java - 等距排序的比较误差

标签 java sorting libgdx comparable isometric

所以我正在为我的 Sprite 实现一个等距排序器,并且在比较何时应该渲染图 block 时遇到一些问题。我正在对所有将通过实现它们来渲染的等距 Sprite 进行比较。

问题是,当我实现以下compareTo方法时:

// 1 = render this after
// 0 == render same
// -1 = render this before
@Override
public int compareTo(IsoSprite o) {
    if(z >= o.z && maxY <= o.minY && maxX <= o.minX){
        return 1;
    }
    if(z >= o.z && maxY >= o.minY && maxX >= o.minX){
        return -1;
    }
    if(z > o.z){
        return 1;
    }
    if(z < o.z){
        return -1;
    }

    //z == o.z && maxY == o.maxY && minY == o.minY && minX == o.minX && maxX == o.maxX
    return 0;
}

我收到错误“比较方法违反了其一般契约!”来自 LibGDX 数组(我用于排序)中的 array.sort 调用。当查看其他人的问题时,我不知道应该如何解决这个错误,但这些问题大多是微不足道的。有人知道我应该如何在等距比较中解决这个问题吗?

我的等距世界(供引用): enter image description here

编辑: 仅按 Z 排序时发现一些有趣的东西:

//Doesn't work
public int compareTo(IsoSprite o) {

    if(maxZ > o.z){
        return 1;
    }
    if (maxZ < o.z){
        return -1;
    }
    return 0;
}

//Works
@Override
public int compareTo(IsoSprite o) {
    if(z > o.z){
        return 1;
    }
    if(z < o.z){
        return -1;
    }
    return 0;
}

最佳答案

我意识到我无法进行可比性中所需的比较。因此,我使用自己的 Quicksort 实现来使用自己的compareTo 方法进行排序,该方法基本上检查一个 Sprite 是在另一个 Sprite 的后面还是前面。

无论如何,感谢您的帮助!

关于java - 等距排序的比较误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30735602/

相关文章:

mysql - 表中的行顺序取决于相关表

java - 强制 android libgdx 进入沉浸模式

java - GdxRuntimeException : File not found

java - 对arraylist中的具体数据求和

java - 您可以在构造函数中将实例变量声明为参数吗?

java - 什么是NullPointerException,我该如何解决?

java - Groovy 如何使用正则表达式在 map 中查找值

ruby - 先按值排序散列,然后按键排序

c# - ListView 按列排序

intellij-idea - 使用 Gradle 导入时运行桌面 libgdx 时出错