У меня странная реакция на запаздывание в игре, которую я делаю, когда использую kbhit с операторами if. Однако я не вижу такой же проблемы с запаздыванием, когда я использую оператор switch. Вот и мои коды в IF и переключатель.
Приведенный ниже код вызывает задержку, когда я пытаюсь переместить персонажа, мне придется дважды нажать кнопку, чтобы персонаж переместился.
void PlayerBike()
{
if (kbhit())
{
if ((getch()) == 'w'){PlayerX = PlayerX - 1;}
else if ((getch()) == 's'){PlayerX = PlayerX +1;}
else if ((getch()) == 'd'){PlayerY = PlayerY +1;}
else if ((getch()) == 'a'){PlayerY = PlayerY - 1;}
}
}
Переключатель оператора, который не вызывает задержки
if (kbhit())
{
switch (getch())
{
case 'w':
PlayerX = PlayerX - 1;
break;
case 's':
PlayerX = PlayerX + 1;
break;
case 'd':
PlayerY = PlayerY + 1;
break;
case 'a':
PlayerY = PlayerY - 1;
break;
}
}
Я хотел бы использовать оператор if лучше, так как он выглядит чище.
Каждый раз, когда вы звоните getch
, вы ждете символа ввода от пользователя. Если вы хотите двигаться влево, вам на самом деле придется нажать клавишу четыре раза.
Исправить просто — только звонок getch()
один раз:
if (kbhit()) {
char keystroke = getch();
if (keystroke == 'w'){PlayerX = PlayerX - 1;}
else if (keystroke == 's'){PlayerX = PlayerX +1;}
else if (keystroke == 'd'){PlayerY = PlayerY +1;}
else if (keystroke == 'a'){PlayerY = PlayerY - 1;}
}
Кстати, у вас была дополнительная пара скобок вокруг каждого вызова getch (). Все, что тебе нужно getch()
не (getch())
,
Ваш if
кодовые звонки getch
не раз, что не то, что вы хотите.
Это потому, что в вашем множественном выражении if / else if это вызовет getch
более одного раза, если последний оператор if не удался. Вместо этого вы можете сделать следующее:
if(kbhit())
{
char chInput = getch();
if (chInput == 'w'){PlayerX = PlayerX - 1;}
else if (chInput == 's'){PlayerX = PlayerX +1;}
else if (chInput == 'd'){PlayerY = PlayerY +1;}
else if (chInput == 'a'){PlayerY = PlayerY - 1;}
}
Это будет только позвонить getch
Один раз, затем нажмите клавишу с символом.