2015-05-03 3 views
0

Итак, скажите, что вы играете сверху вниз. Вы нажимаете 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; 

ответ

0

Так я понял, то ответ сам после нескольких часов борьбы.

Просто установка скорости до нуля до проверки: EDIT: умножение на .89 на самом деле сделано для более плавного движения.

 if (kb.IsKeyDown(Keys.W) || kb.IsKeyDown(Keys.A) || kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.D)) 
     { 
      velocity *= .89f 
      if (kb.IsKeyDown(Keys.W)) 
       velocity.Y = -movespeed; 
      if (kb.IsKeyDown(Keys.A)) 
       velocity.X = -movespeed; 
      if (kb.IsKeyDown(Keys.S)) 
       velocity.Y = movespeed; 
      if (kb.IsKeyDown(Keys.D)) 
       velocity.X = movespeed; 
     } 
     else 
      velocity *= .9f; 
+0

Вы считаете, что диагональная скорость быстрее, чем перемещение вверх/вниз/влево/вправо? одним из решений является нормализация скорости, а затем умножение на скорость. другой - делить скорость на 'sqrt (2)', если движение диагонально. –

+0

Нет, я этого не делал. Не могли бы вы уточнить? – omni

+0

Диагональная скорость будет «величиной скорости» sqrt (2) '. – snahor