2012-03-16 3 views
0

Привет, я делаю игру для тестов на Java, и я хочу что-то сделать, но не знаю, как это сделать. Итак, у меня есть 4 анимации для направления вверх/вниз/влево/вправо и положение животного (сущности) и игрока.Как определить направление, которое смотрит на игрока - Java

Я хочу, чтобы животное выглядело в сторону игрока все время, но не знает, как это сделать. Если я использую «if entity.x> player.x», он будет выглядеть правильно, но не сможет смотреть вниз или вверх?

Надеюсь, вы understeand, что я имею в виду, пожалуйста, ответьте: D

+0

* «Пожалуйста, если вы что-то знаете, скажите мне». * Я знаю, что имеет смысл задавать вопрос. Какой у Вас вопрос? Также .. * «Я попытался использовать угол, чтобы определить, какая анимация должна работать, но не удалась» * Попробуйте описать, что вы сделали (ваша лучшая попытка) в SSCCE. Код говорит громче слов. –

+0

Хорошо, я знаю, как вы себя чувствуете, потому что я часто вижу, что люди говорят такой же вопрос, как и я, но я не знаю, как объяснить это лучше. У меня есть 4 анимации для увеличения/уменьшения/слева/справа для сущности (моба), и я хочу, чтобы сущность постоянно смотрела на игрока. Я не знаю, как определить направление, которое смотрит на игрока. – IvanDonat

+1

Указанный намек «Как определить направление, которое смотрит на игрока?» это не только вопрос, но и первый вопрос, который появляется на этой странице. Пожалуйста, отредактируйте его в сообщении, чтобы я мог удалить некоторый шум. –

ответ

0

Вы на полпути уже там. То, что вы хотите сделать, это определить, где по отношению к животному лежит игрок.

Давайте сначала сделать перечисление инкапсулировать этот

enum Direction { NORTH, EAST, SOUTH, WEST }; 

Как вы сказали, вы можете проверить, является ли игрок находится на левой или правой части животного.

if(player.getX() > animal.getX()) { 
    animal.setDirection(Direction.EAST); 
} else { 
    animal.setDirection(Direction.WEST); 
} 

Аналогичным образом, вы можете сделать то же самое с координатами Y и направлением Север/Юг.

if(player.getY() > animal.getY()) { 
    animal.setDirection(Direction.NORTH); 
} else { 
    animal.setDirection(Direction.SOUTH); 
} 

Итак, как мы выясним, следует ли использовать первую проверку или вторую проверку? Ну, подумайте об этом на секунду. Если вы живете «на севере» от того, где вы находитесь, вы, вероятно, не прямо на севере, а скорее, в основном на севере - конечно, больше на север, чем на восток, например. Итак, хорошая проверка заключается в том, «что такое доминирующее направление», т.е. если вы живете дальше на север, чем вы на востоке, вы говорите, что живете на севере. Итак, как вы это проверяете? Ну, вы говорите, что расстояние, на котором вы должны путешествовать на север/юг к месту, больше, чем расстояние, на котором вы должны путешествовать на восток/запад. В коде:

if(Math.abs(animal.getX() - player.getX()) > Math.abs(animal.getY() - player.getY())) { 
    //More east-west than north-south - do EAST-WEST check 
} else { 
    //More north-south than east-west - do NORTH-SOUTH check 
} 

Таким образом, совмещая это дает окончательный результат:

if(Math.abs(animal.getX() - player.getX()) > Math.abs(animal.getY() - player.getY())) { 
    //More east-west than north-south - do EAST-WEST check 
    if(player.getX() > animal.getX()) { 
     animal.setDirection(Direction.EAST); 
    } else { 
     animal.setDirection(Direction.WEST); 
    } 
} else { 
    //More north-south than east-west - do NORTH-SOUTH check 
    if(player.getY() > animal.getY()) { 
     animal.setDirection(Direction.NORTH); 
    } else { 
     animal.setDirection(Direction.SOUTH); 
    } 
} 

И вы сделали! Позвольте мне знать, если у вас есть еще вопросы.

+0

Вау! Большое спасибо, я думал сделать что-то подобное, но не знал, как, потому что я не знал о Math.abs. – IvanDonat

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

  • Нет связанных вопросов^_^