Как определить направление, которое смотрит игрок - Java - PullRequest
0 голосов
/ 16 марта 2012

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

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

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

1 Ответ

0 голосов
/ 16 марта 2012

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

Давайте сначала создадим перечисление для инкапсуляции этого

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);
    }
}

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

...