Я делаю игру, и игрок перемещается, щелкая мышью по точке на карте. Затем я использую функцию для вычисления угла до точки щелчка, которая отправляет их по траектории в направлении этой точки щелчка.Проверьте, находится ли значение в пределах определенного диапазона
var angle = player.angleToPoint(new me.Vector2d(e.gameX, e.gameY));
player.vel.set(Math.cos(angle) * 2, -Math.sin(angle) * 2);
Это работает.
Проблема в том, что я хочу, чтобы игрок прекратил движение и изменил анимацию «стоять», как только они достигли этой точки щелчка. Расположение точки щелчка и игрока приведены в десятичных дробей:
журнала (clickPointX + "" + clickPointY + " "+ player.x +"," + player.y) дает:
2491.830945558739 , 627.4212034383954, 4894.160772981247, 813.5879189245883
В моей функции обновления я хотел проверить, равно ли она, но размер приращения скорости никогда не позволит ему равняться. Если я проверяю < = или
if (player.x == clickPointX && player.y == clickPointY) {
player.vel.x = 0;
player.vel.y = 0;
player.setCurrentAnimation("stand");
}
else {
if (!player.isCurrentAnimation("walk")) {
player.setCurrentAnimation("walk");
}
}
Это не похоже> =, чтобы работать. Есть ли лучший способ проверить, прибыл ли игрок в местоположение точки клика? Возможно, проверьте, находится ли местоположение игрока в пределах области щелчка?
Вы пробовали 'parseInt()'? – OnlyMAJ
Возможно использование Math.abs (player.x-clickPointX) <= someVal ... и т. Д. Поможет ... – deweyredman
Не используйте 'num == target' с десятичными числами. Вы можете использовать 'Math.abs (num - target)
Oriol