Таким образом, я реализую изометрический сортировщик для своих спрайтов, и у меня возникают некоторые проблемы с сопоставлением, когда должны быть отображены плитки. Я сортирую все изометрические спрайты, которые будут реализованы, реализуя их как сопоставимые.Ошибка сравнения для изометрической сортировки
Проблема заключается в том, когда я реализует следующий метод 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;
}
я получаю ошибку «Метод сравнения нарушает его общий контракт!» от вызова array.sort в массиве LibGDX (который я использую для сортировки). Я не могу сказать, как я должен это решать, глядя на проблему других людей с этой ошибкой, но эти проблемы в основном тривиальны. Кто-нибудь знает, как я должен решить это в моем изометрическом сравнении?
Мой изометрический мир (для справки):
Edit: нашел что-то интересное, когда только сортировка по 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, я попытаюсь отредактировать его, чтобы он стал более ясным. – Deminth
Хм, я, должно быть, неправильно понимаю вашу проблему. – azurefrog
Как должна выглядеть изометрическая сортировка, если 'maxX> o.maxX', но' minX
MaxZoom