Есть ли замена Console.ReadKey()?

#c# #.net #input #keyboard

#c# #.net #ввод #клавиатура

Вопрос:

Мне нужна замена Console.ReadKey() , чтобы я мог нажимать несколько клавиш одновременно.

Мне это нужно, потому что я создаю консольный игровой движок ASCII на C #. Если бы я создал управляемый проигрыватель, я мог бы перемещаться только вверх, вниз, влево и вправо. Никакого диагонального перемещения вообще, только потому, что консоль.ReadKey() позволяет нажимать по одной клавише за раз.

Любая помощь будет признательна! 🙂

Я согласен с установкой пакетов в мой проект решения

Функция для ввода ключа такова (она вызывается в каждом кадре, чтобы проверить, нажата ли клавиша):

 public static char Key() // returns the pressed key in char
        {
            ConsoleKeyInfo keyPress;
            if (Console.KeyAvailable) // will read the key only if it is pressed (can cause input lag on low frame rates)
            {
                keyPress = Console.ReadKey(true);
                return char.ToUpper(keyPress.KeyChar);
            }
            return defau<
        }
 

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

1. Консоль на самом деле не самая лучшая среда для игр. По какой-либо конкретной причине вы выбрали это?

2. Ну, я хотел простой способ создать игровой движок ASCII, который заменяет пиксели буквами, цифрами и символами. Я подумал, что было бы интересно посмотреть, как инди-игры создаются в ASCII, и посмотреть, как разработчики справляются с графическими ограничениями при создании игр на консольном C#

Ответ №1:

Я нашел лучшую замену! Просто установите пакет NuGet с именем EZInput, который позволит улучшить управление, вводя по одному ключу за раз.

Я пытался найти примеры и документацию EZinput в Интернете, но ничего не смог найти. Я научился использовать его самостоятельно. Просто, просто введите EzInput и поставьте точку в коде, и он покажет все, что он может предложить.

если вы хотите нажать W, чтобы что-то сделать, вот что вы должны сделать:

 if (EZInput.Keyboard.IsKeyPressed(EZInput.Key.W))
{
    // Do something...
}
 

Но лучше всего набирать using EZInput; текст так, чтобы вам не нужно было вводить имя каждый раз.

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

1. это здорово. Что сделало бы ваш ответ еще лучше для других (и, вероятно, принесло бы вам больше голосов), так это а) ссылка на ресурсы о EZInput и б) демонстрация краткого примера кода того, как вы использовали его для выполнения того, что вам нужно.

2. Я пытался найти примеры и документацию EZinput в Интернете, но ничего не смог найти. Я научился использовать его самостоятельно. Просто, просто введите EzInput и поставьте точку в коде, и он покажет все, что он может предложить.

3. Дело не в этом. Лучшие ответы StackOverflow содержат полезные примеры, которые отвечают на конкретный вопрос, а не просто расплывчатую инструкцию «используйте эту библиотеку, это здорово». В противном случае это, скорее всего, приведет к еще большему количеству вопросов от людей примерно такого рода: «Я пытался использовать EZInput для решения той же проблемы, что и в вопросе Ali107, но это не работает… что я сделал не так?» Гораздо полезнее для начала просто показать людям, что вы сделали. А также, если нет онлайн-документации для этой библиотеки, вы могли бы, по крайней мере, сослаться на ее запись на Nuget.org (так что никакой двусмысленности нет).