При использовании Console.ReadKey() на второй раз происходит задержка - C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток. Создаю простенькую игру в консоли типа тенниса. С помощью ReadKey() считываю нажатую клавишу (LeftArrow, RightArrow). Сам же ReadKey() находиться в цикле while. Проблема в следующем: при зажатии клавиши после первого прочтения клавиши происходит задержка (примерно 1 сек), а потом все нормально идет. Как можно решить данную проблему.

Решение задачи: «При использовании Console.ReadKey() на второй раз происходит задержка»

textual
Листинг программы
  1. class Program
  2.     {
  3.         //Координаты объекта
  4.         static int x = 40;
  5.         const int y = 10;
  6.  
  7.         //С помощью данной структуры будем получать информацию о нажатой клавиши
  8.         static ConsoleKeyInfo k = new ConsoleKeyInfo();
  9.  
  10.         [STAThread]
  11.         static void Main(string[] args)
  12.         {
  13.             //Делаем курсор невидимым
  14.             Console.CursorVisible = false;
  15.  
  16.             //Метод рисующий объект
  17.             Draw();
  18.  
  19.             while (true)
  20.             {
  21.                 //Стчитываем клавишу
  22.                 k = Console.ReadKey(true);
  23.  
  24.                 //Определяем какая клавиша была нажата и в соответствии с этим изменяем координату х
  25.                 if (k.Key == ConsoleKey.LeftArrow)
  26.                 {
  27.                     while (!Keyboard.IsKeyUp(Key.Left))
  28.                     {
  29.                         x--;
  30.                         //Метод рисующий объект
  31.                         Draw();
  32.                         Thread.Sleep(30);
  33.                     }
  34.                     k = new ConsoleKeyInfo();
  35.                 }
  36.                 else if (k.Key == ConsoleKey.RightArrow)
  37.                 {
  38.                     while (!Keyboard.IsKeyUp(Key.Right))
  39.                     {
  40.                         x++;
  41.                         //Метод рисующий объект
  42.                         Draw();
  43.                         Thread.Sleep(30);
  44.                     }
  45.                     k = new ConsoleKeyInfo();
  46.                 }
  47.             }
  48.         }
  49.  
  50.         //Метод рисовки
  51.         static void Draw()
  52.         {
  53.             //Очистить консоль
  54.             Console.Clear();
  55.  
  56.             //Нарисовать объект в нужных координатах
  57.             Console.SetCursorPosition(x, y);
  58.             Console.Write('#');
  59.         }
  60.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы