#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 (так что никакой двусмысленности нет).