@Afafks123132132165

Код для движения к цели?

Ну попытался сделать движение существа к еде невышло.Формулу использовал такого типа.
(хеды - хсущества) / 100 проблема этой формулы в том что по мере приблежения к еде существо замедляется.
Ну оно и понятно делим же.Есть какая нибудь простенькая формула для нормального движения к еде.Что бы персонаж не замедлялся и не ускорялся.Вот.
  • Вопрос задан
  • 226 просмотров
Решения вопроса 2
Seasle
@Seasle Куратор тега JavaScript
const player = {
	x: 0,
	y: 0,
	speed: 3
};
const target = {
	x: 100,
	y: 300
};

// Ваша функция для обновления
const update = () => {
	const angle = Math.atan2(target.y - player.y, target.x - player.x);
	const distance = Math.hypot(target.x - player.x, target.y - player.y);

	if (distance > player.speed) {
		player.x += Math.cos(angle) * player.speed;
		player.y += Math.sin(angle) * player.speed;
	} else {
		player.x += Math.cos(angle) * distance;
		player.y += Math.sin(angle) * distance;
	}

	requestAnimationFrame(update);
};
update();

Ответ написан
@Karpion
Пусть существо имеет координаты Sx и Sy, а еда - Ex и Ey.

Цикл:
  • вычисляем вектор на еду: Rx=Ex-Sx , Ry=Ey-Sy ;
  • вычисляем длину вектора L=sqrt(Rx**2+Ry**2) ;
  • если длина вектора = 0, то
    • мы приехали, начинаем кушать (выход из цикла);

  • иначе если длина вектора больше шага T, то
    • нормируем вектор на еду: Rx=Rx/L*T , Ry=Ry/L*T .

  • делаем шаг: Sx+=Rx , Sy+=Re ;
  • переходим к следующей итерации цикла ;


Для неподвижной еды и/или постоянного шага T вычисления можно оптимизировать (например, сразу вычислить нужное количество шагов и организовать счётчик по циклу; и/или один раз вычислить нормированный вектор). Однако, надо быть осторожным с округлением координат особенно если координаты целочисленные, а шаг T маленький - тогда существо может очень сильно мотать в стороны.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы