0

Пишу игру в командной строке (да, я поехавший, у меня уже много игр выпущено) Так вот, есть цикл, который выводит на экран числа от 1 до 8 (в самом проекте он выводит спрайты бега персонажа), если кнопка нажата. Если кнопка не нажата - выводится frame_0 (просто анимацию ходьбы я уже сделал, а стояние - дорабатываю). Так вот, проблема заключается в том, что если в определенный момент перестать нажимать на кнопку, то не выведется frame_0, а застынет число(номер спрайта). Вот сам код

for (int i = 1; i < 9; i++)
{
   if (!Console.KeyAvailable){ Console.Clear(); Console.Write("frame_0");}
   else while (Console.KeyAvailable){ Console.ReadKey(true); }

key = Console.ReadKey(false).Key;

Console.Clear(); Console.Write(i); Thread.Sleep(100); }

(Я использую key = Console.ReadKey(false).Key, чтобы потом в зависимости от нажатой клавиши двигать персонажа)

Мне кажется, что это неисправимо, но вдруг вы чего сможете подсказать

strigrt
  • 101
  • 1
    Писать что-то вменяемое на потоковом вводе в консоль крайне неудобно. Я вашу проблему понял, и решается она изменением подхода в работе с вводом. Если не страшно залезать в дебри Win API и асинхронного программирования, то попробуйте разобраться и прикрутить вот это решение. – aepot Apr 17 '21 at 20:30
  • значит, если не выйдет, то буду делать управление как в point-and-click квесте))) – strigrt Apr 17 '21 at 20:37
  • а как-нибудь поколдовать в while (Console.KeyAvailable){ Console.ReadKey(true); } можно? чтоб не считывать за ним key = Console.ReadKey(false).Key, а сразу получать нажатую клавишу? Но у меня получалось все так, что постоянно экран перезагружается (типо дополнительную переменную ConsoleKey вводить, все такое)... – strigrt Apr 17 '21 at 20:41
  • 1
    Если кратко, то вам без многопоточности не обойтись. То есть параллельно должна идти анимация и обработка клавиш, а у вас пока последовательно. Но из-за того что ввод потоковый, вы не знаете о факте, зажата клавиша или нет, вы можете только это предсказывать по частоте, с которой символы сыплются в поток ввода. И реализовать такое предсказание весьма не просто, да и бессмысленно. Чтобы знать явно факт зажатия, нужен другой подход к работе с клавой, ссылка выше. – aepot Apr 17 '21 at 20:58
  • 1
  • @tym32167, тут у меня ситуация сложнее, у меня не просто отрисовка одного объекта, а целый каскад кадров для одного объекта и это усложняет задачу... эхх... все-таки надо осваивать игровые движки – strigrt Apr 19 '21 at 06:41

0 Answers0