Вообщем, дело такое: пишу игру в консоли и там вроде бы все нормально происходит, при нажатии клавиши игрок передвигается со сменой кадров, при отжатии стоит с кадром стояния. Но происходит странная вещь: когда я нажимаю и удерживаю кнопку, то происходит вот что: игрок перемещается, затем застывает, а потом начинает спокойно перемещаться, пока я клавишу не отожму соре за качество
Так вот, я подумал, что это у меня какие-то проблемы в цикле. Решил наклипать более простой проект с одним персонажем-символом нуля, который тоже перемещается влево и вправо. Вот сам код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace test
{
class player
{
public int x = 1;
public int previousX = 1;
public void SetPosition()
{
Console.SetCursorPosition(previousX, 5);
Console.Write(' ');
Console.SetCursorPosition(x, 5);
Console.Write('0');
previousX = x;
}
}
class Program
{
static void Main()
{
Console.CursorVisible = false;
player p1 = new player();
p1.x = 1;
p1.previousX = 1;
while (true)
{
p1.SetPosition();
while (Console.KeyAvailable == false) { }
if (Console.KeyAvailable == true)
p1.x = ChangePlayerPossition(Console.ReadKey(true).Key, p1.x);
}
}
// Изменение координат
static int ChangePlayerPossition(ConsoleKey key, int x)
{
switch (key)
{
case ConsoleKey.LeftArrow:
if (x - 1 > 5) { x--; }
break;
case ConsoleKey.RightArrow:
if (x + 1 < 70) { x++; }
break;
}
return x;
}
}
}
Может выглядит криво, не спорю. Я думал, что тут этой штуки не будет. Как бы не так
игрок передвигается на 1 позицию вперед, застывает, а потом начинает двигаться, пока не отожму клавишу...
Может тут дело в реализации и нужно в потоки лезть? Или тут уже ничего не поможет? Вам лично было бы нормально играть в игру с такой темой (как на первой гифке? (тип, может так оставить? :D))


while (Console.KeyAvailable == false). Я же вроде вам писал пример. Надо писатьwhile (!Console.KeyAvailable), то же самое проif (Console.KeyAvailable). А то вы пишете что-то типаwhile (true == true), когда можно писать простоwhile (true). – aepot Apr 19 '21 at 21:34