почему я не могу переместить игрока, пока пытаюсь создать space invader в c#

#c#

Вопрос:

Что не так с моим кодом, я пытаюсь сделать space invader с помощью visual studio

 using System;  using System.Windows.Forms;  namespace _2nd_game_try {  public partial class Form1 : Form  {  bool goleft, goright;  int playerSpeed = 13;   public Form1()  {  InitializeComponent();  }   private void Form1_Load(object sender, EventArgs e)  {   }   private void keydown(object sender, KeyEventArgs e)  {  if (e.KeyCode == Keys.Left)  {  goleft = true;  }  if (e.KeyCode == Keys.Right)  {  goright = true;  }  }   private void keyup(object sender, KeyEventArgs e)  {  if (e.KeyCode == Keys.Left)  {  goleft = false;  }  if (e.KeyCode == Keys.Right)  {  goright = false;  }  }  private void gameTime_Tick(object sender, EventArgs e)  {   }  private void Walk()  {  while (true)  {  if (goleft)  {  player.Left -= playerSpeed;  }  if (goright)  {  player.Left  = playerSpeed;  }  }  }  } }  

Комментарии:

1. Добро пожаловать в Stack Overflow! Почему вы думаете , что что-то не так с вашим кодом? Какая конкретная операция работает не так, как ожидалось? Когда вы отлаживаете, какую конкретную проблему вы наблюдаете? Какая операция завершается неудачно? Какие значения использовались в то время? Каков же результат? Какого результата ожидали? Почему?

2. Вам, вероятно, нужно позвонить Walk() с вашего timer_Tick. Кроме того, не похоже, что вы сопоставили какие-либо из ваших событий с их обработчиками событий.

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

Ответ №1:

  1. Включите таймер и используйте допустимый интервал.
  2. Удалите while (true) из Walk() метода.
  3. Вызов Walk() внутри таймера callbak.
  4. Подпишитесь на обработчики событий keyup и keydown.
  5. Установите для свойства keypreview значение true в своей форме.