2015-05-17 4 views
0

Для моей программы я делаю 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; 
    } 

} 

ответ

1

Самый простой способ, который я вижу, - просто установить направление игрока, когда вы нажимаете клавишу вниз.

Таким образом, у вас будет направление игрока вначале VK_NONE, и когда вы нажмете любую клавишу, вы установите направление игрока на этот ключ.

И позже эти ifs будут вместо GetAsyncKeyState (VK_UP)! = 0, которые будут записаны как: playerDirection == VK_UP.

+0

Хорошо, это работает. Но теперь скажем, я нажимаю правую клавишу, и следующий поворот на три квартала, и я нажимаю клавишу вверх. Мой плеер автоматически остановится. Какие-либо предложения? – ThatAwesomeCoder

+0

Не стоит останавливаться. Любое нажатие клавиши должно указывать только направление. Итак, вам нужно скопировать первые 4 раза, чтобы установить направление игрока. Остальная часть вашей логики такая же, как и раньше. Очень вероятно, что вы скопировали/вклеили неправильно для всех ветвей. :) –

+0

пустота управления() { \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) {...} ... } –