Итак, скажите, что вы играете сверху вниз. Вы нажимаете W
и D
, чтобы идти в правильном направлении. Теперь вы просто хотите идти вправо, поэтому вы отпускаете ключ W
. Можно было бы ожидать, что вы затем смените направления и направитесь направо, но вместо этого вы продолжите движение вверх-направо. Что я могу сделать для решения этой проблемы? Вот мой код:XNA Diagonal Movement Key Release
if (kb.IsKeyDown(Keys.W) || kb.IsKeyDown(Keys.A) || kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.D))
{
if (kb.IsKeyDown(Keys.W))
velocity.Y = -movespeed;
else if (kb.IsKeyDown(Keys.A))
velocity.X = -movespeed;
else if (kb.IsKeyDown(Keys.S))
velocity.Y = movespeed;
else if (kb.IsKeyDown(Keys.D))
velocity.X = movespeed;
else if (kb.IsKeyDown(Keys.W) && kb.IsKeyDown(Keys.D))
{
velocity.X = movespeed;
velocity.Y = -movespeed;
}
else if (kb.IsKeyDown(Keys.W) && kb.IsKeyDown(Keys.A))
{
velocity.X = -movespeed;
velocity.Y = -movespeed;
}
else if (kb.IsKeyDown(Keys.S) && kb.IsKeyDown(Keys.D))
{
velocity.X = movespeed;
velocity.Y = movespeed;
}
else if (kb.IsKeyDown(Keys.S) && kb.IsKeyDown(Keys.A))
{
velocity.X = -movespeed;
velocity.Y = movespeed;
}
}
else
velocity *= .9f;
position += velocity;
Вы считаете, что диагональная скорость быстрее, чем перемещение вверх/вниз/влево/вправо? одним из решений является нормализация скорости, а затем умножение на скорость. другой - делить скорость на 'sqrt (2)', если движение диагонально. –
Нет, я этого не делал. Не могли бы вы уточнить? – omni
Диагональная скорость будет «величиной скорости» sqrt (2) '. – snahor