У меня есть следующая функция, которая используется как параметр функции glutKeyboardFunc
:
void handleKeypress(unsigned char key, //The key that was pressed
int x, int y) { //The current mouse coordinates
switch (key) {
case 27: //Escape key
exit(0); //Exit the program
}
if (key == 'a')
{
moveCircleLeft(0);
}
if (key == 'w')
{
moveCircleUp(0);
}
if (key == 's')
{
moveCircleDown(0);
}
if (key == 'd')
{
moveCircleRight(0);
}
}
Теперь я покажу вам moveCircleLeft
в качестве примера написания функций moveCircle
:
void moveCircleLeft(int x)
{
characterX = characterX - 0.1;
glutPostRedisplay();
x++;
if (x < 10)
{
glutTimerFunc(10, moveCircleLeft, x);
}
}
Другие moveCircle
функции работают аналогично, и единственное различие между четырьмя функциями заключается в том, является ли его плюс минус 0,1 или равен characterY
в отличие от characterX
.
Теперь вот проблема:
Все направления движутся в правильном направлении, но при попытке нажатия клавиш возникает задержка / пауза в движении персонажа. Поэтому, если я нажимаю только клавишу d (moveCircleRight), она немного перемещается вправо, останавливается на некоторое время, а затем перемещается по экрану в этом направлении с постоянной скоростью без пауз. Затем, если я переключаюсь на другую клавишу, она немного останавливается перед сменой направления, затем движется с постоянной скоростью в этом направлении.
Любое предложение по этому поводу будет оценено!