Для моей программы я делаю Pacman! Я могу позволить игроку перемещаться с ключом, но как я могу сделать это, когда игрок автоматически перемещается, а затем, когда вы нажимаете другую клавишу, он изменяется. В кратком предложении, если я нажимаю клавишу со стрелкой вправо, игрок движется самостоятельно, если я не буду удерживать клавишу, и если я нажму на клавишу вверх, следующий свободный угол, тогда игрок будет продолжать движение вверх. Вот мой код для движения игрока:C++ Continuous Player Movement
void Controls()
{
if (GetAsyncKeyState(VK_UP) != 0)
{
text(Ply_X, Ply_Y, 15, " ");
if(Map[Ply_Y-1][Ply_X] == '.'){ Ply_Y--; points++; } else
if(Map[Ply_Y-1][Ply_X] == ' ') Ply_Y--;
text(Ply_X, Ply_Y, 14, ""); cout << (char)2;
}
if (GetAsyncKeyState(VK_DOWN) != 0)
{
text(Ply_X, Ply_Y, 15, " ");
if(Map[Ply_Y+1][Ply_X] == '.'){ Ply_Y++; points++; } else
if(Map[Ply_Y+1][Ply_X] == ' ') Ply_Y++;
text(Ply_X, Ply_Y, 14, ""); cout << (char)2;
}
if (GetAsyncKeyState(VK_RIGHT) != 0)
{
text(Ply_X, Ply_Y, 15, " ");
if(Map[Ply_Y][Ply_X+1] == '.'){ Ply_X++; points++; } else
if(Map[Ply_Y][Ply_X+1] == ' ') Ply_X++;
text(Ply_X, Ply_Y, 14, ""); cout << (char)2;
}
if (GetAsyncKeyState(VK_LEFT) != 0)
{
text(Ply_X, Ply_Y, 15, " ");
if(Map[Ply_Y][Ply_X-1] == '.'){ Ply_X--; points++; } else
if(Map[Ply_Y][Ply_X-1] == ' ') Ply_X--;
text(Ply_X, Ply_Y, 14, ""); cout << (char)2;
}
}
Хорошо, это работает. Но теперь скажем, я нажимаю правую клавишу, и следующий поворот на три квартала, и я нажимаю клавишу вверх. Мой плеер автоматически остановится. Какие-либо предложения? – ThatAwesomeCoder
Не стоит останавливаться. Любое нажатие клавиши должно указывать только направление. Итак, вам нужно скопировать первые 4 раза, чтобы установить направление игрока. Остальная часть вашей логики такая же, как и раньше. Очень вероятно, что вы скопировали/вклеили неправильно для всех ветвей. :) –
пустота управления() { \t если { \t \t PlDir = VK_UP (GetAsyncKeyState (VK_UP) = 0!); } \t, если { \t \t PlDir = VK_DOWN (GetAsyncKeyState (VK_DOWN)! = 0); } \t, если (GetAsyncKeyState (VK_RIGHT)! = 0) { \t \t PlDir = VK_RIGHT; } \t, если { \t \t PlDir = VK_LEFT (GetAsyncKeyState (VK_LEFT)! = 0); } \t если (PlDir == VK_UP) {...} если (PlDir == VK_DOWN) {...} ... } –