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

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

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

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

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

textual
Листинг программы
class Program
    {
        //Координаты объекта
        static int x = 40;
        const int y = 10;
 
        //С помощью данной структуры будем получать информацию о нажатой клавиши
        static ConsoleKeyInfo k = new ConsoleKeyInfo();
 
        [STAThread]
        static void Main(string[] args)
        {
            //Делаем курсор невидимым
            Console.CursorVisible = false;
 
            //Метод рисующий объект
            Draw();
 
            while (true)
            {
                //Стчитываем клавишу
                k = Console.ReadKey(true);
 
                //Определяем какая клавиша была нажата и в соответствии с этим изменяем координату х
                if (k.Key == ConsoleKey.LeftArrow)
                {
                    while (!Keyboard.IsKeyUp(Key.Left))
                    {
                        x--;
                        //Метод рисующий объект
                        Draw();
                        Thread.Sleep(30);
                    } 
                    k = new ConsoleKeyInfo();
                }
                else if (k.Key == ConsoleKey.RightArrow)
                {
                    while (!Keyboard.IsKeyUp(Key.Right))
                    {
                        x++;
                        //Метод рисующий объект
                        Draw();
                        Thread.Sleep(30);
                    } 
                    k = new ConsoleKeyInfo();
                }
            }
        }
 
        //Метод рисовки
        static void Draw()
        {
            //Очистить консоль
            Console.Clear();
 
            //Нарисовать объект в нужных координатах
            Console.SetCursorPosition(x, y);
            Console.Write('#');
        }
    }

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


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

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

11   голосов , оценка 4.273 из 5
Похожие ответы