2013-02-18 3 views
0

Я делаю игру, где мне нужно проверить, соответствуют ли координаты объекта требованиям (координаты места назначения) с допустимой + - разницей.Проверьте, соответствуют ли координаты объекта

Пример:

int x; //current object X coordinate 
int y; //current object Y coordinate 

int destinationX = 50; //example X destination value 
int destinationY = 0; //example Y destination value 
int permittedDiference = 5; 

boolean xCorrect = false; 
boolean yCorrect = false; 

Я пытаюсь создать алгоритм, проверяя

if (x == destinationX + permittedDifference || x == destinationX - permittedDifference) 
{ 
    xCorrect = true; 
} 

if (y == destinationY + permittedDifference || y == destinationY - permittedDifference) 
{ 
    yCorrect = true; 
} 

Это звучит как наиболее просто способ, но, возможно, лучше один? Будем благодарны за некоторые советы.

+0

Другой чем, возможно, рефакторинга в 'xAllowed' или' xBetween' и т.д. методы, что еще вы могли бы сделать? –

ответ

5

Здесь вы можете использовать метод Math.abs(). Получить абсолютную разницу между x и destinationX, и проверить, является ли оно меньше или равно permittedDifference:

xCorrect = Math.abs(x - destinationX) <= permittedDifference; 
yCorrect = Math.abs(y - destinationY) <= permittedDifference; 
+0

Это хорошо работает, мне просто интересно, как вы думаете, какой aproach лучше использовать, быстрее я имею в виду, этот метод использует метод abs или первый, который вы опубликовали при начале? Я буду проверять эти «требования» все время, на каждое обновление, для нескольких объектов, конечно, это не требует больших вычислений, но все же я хотел бы узнать ваше мнение, спасибо. – Matim

+0

@Matim. Ну, я не отправил никаких других решений. И что касается скорости, вы действительно не должны этого беспокоиться. Читаемость является главной проблемой здесь. И становится понятным при использовании этого подхода, что вы пытаетесь сделать, а не в обычном блоке 'if-else'. Кроме того, если вы часто делаете эти тесты, лучше переместить эти логики в некоторые методы и дать это значащее имя и вызвать его. Это было бы намного яснее. –

Смежные вопросы