Фон: у меня есть игра с птичьим видом, где игрок управляет космическим кораблем, прикасаясь к кругу - например. коснитесь левого края центра круга, и корабль движется влево, коснитесь верхнего правого и переместится в верхний правый и т. д. ... чем дальше от центра круга псевдо-джойстика, тем больше скорость в этом направление. Тем не менее, я не непосредственно регулируя скорость судна, а скорее установить значение targetSpeed.x и targetSpeed.y, и корабль будет корректировать свою скорость, используя что-то вроде:Как правильно отрегулировать скорость справки игрока? (В основном математический вопрос?)
if (this.speed.x < this.targetSpeed.x) {
this.speed.x += this.speedStep;
}
else if (this.speed.x > this.targetSpeed.x) {
this.speed.x -= this.speedStep;
}
... и тот же для скорости y, а speedStep - небольшое значение, чтобы сделать его более гладким и не слишком резким (корабль не должен идти от быстрого левого направления в прямое прямое направление вправо).
Мой вопрос: используя вышеприведенный код, я считаю, что скорость будет скорректирована быстрее в диагональных направлениях и медленнее вдоль горизонтальных/вертикальных линий. Как исправить это, чтобы иметь равную целевую скорость после?
Большое спасибо за помощь!
Не могли бы вы перефразировать только ваш вопрос, пожалуйста? Что именно вы хотите сделать? Благодарю. –
@Oren: довольно очевидно, что OP хочет сделать - сделайте так, чтобы, скажем, угол был 45 градусов (например, 'targetSpeed.x - speed.x == targetSpeed.y - speed.y'), то приращение все равно 'speedStep', а не' sqrt (2) * speedStep'. –