【发布时间】:2015-06-09 14:52:25
【问题描述】:
所以我正在为我的精灵实现一个等距排序器,但在比较应该何时渲染图块时遇到了一些问题。我正在对所有将通过将它们实现为可比较来呈现的等距精灵进行排序。
问题是,当我实现以下 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 调用。在查看其他人遇到此错误的问题时,我不知道应该如何解决此问题,但这些问题大多是微不足道的。有人知道我应该如何在等距比较中解决这个问题吗?
我的等距世界(供参考):
编辑: 仅按 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;
}
【问题讨论】:
-
但问题是我也需要通过这些单独的 if 语句来获得边界,我会尝试对其进行编辑以便更清晰
-
嗯,那我一定是误会你的问题了。
-
如果
maxX > o.maxX但minX < o.minX,等距排序应该如何表现 -
@MaxZoom 方法不一样
-
您的问题是更多关于您的比较方法如何违反
Comparable接口定义的合同,还是更一般的“我应该如何创建等距元素的自然排序”问题?
标签: java sorting libgdx comparable isometric