Как сделать так чтобы скорость Х и Y не складывалась при движении по диагонали?

Чтобы скорости по осям X и Y не складывались при движении по диагонали, можно использовать нормализацию вектора скорости.

Когда объект движется по диагонали, его скорость по осям X и Y обычно равна друг другу. Если просто сложить эти значения, то в результате получится скорость, учитывающая движение по обеим осям и увеличивающая общую скорость. Это нежелательно, поскольку может привести к неправильному поведению объекта.

Чтобы исправить эту проблему, можно использовать нормализацию вектора скорости. Нормализация вектора означает приведение его к длине единица при сохранении его направления. В данном случае, нормализация вектора скорости позволит сохранить направление движения, но установить длину в 1.

Для реализации этой логики в JavaScript вы можете использовать следующий код:

function normalizeVector(x, y) {
  const length = Math.sqrt(x * x + y * y); // вычисление длины вектора скорости
  if (length !== 0) { // проверка на ненулевую длину, чтобы избежать деления на 0
    return { x: x / length, y: y / length }; // нормализация вектора скорости
  }
  return { x: 0, y: 0 }; // обработка случая нулевой длины
}

// пример использования
const velocityX = 1; // скорость по оси X
const velocityY = 1; // скорость по оси Y

const normalizedVelocity = normalizeVector(velocityX, velocityY);
console.log(normalizedVelocity.x, normalizedVelocity.y); // вывод нормализованных значений скорости

В данном примере функция normalizeVector принимает значения скорости по осям X и Y и возвращает объект с нормализованными значениями скорости. Она использует математическую формулу для вычисления длины вектора по теореме Пифагора, а затем делит значения скорости на эту длину, чтобы достичь нормализации.

Вы можете применить эту логику к объекту, который движется по диагонали, чтобы гарантировать, что его скорость будет оставаться постоянной и не будет зависеть от направления движения.