Остановить анимацию с помощью клавиши GLUT? - PullRequest
0 голосов
/ 25 октября 2018

Я разрабатываю НЛО, который ускоряется по координате х.Однако я бы хотел остановить анимацию - я имею в виду увеличение координаты x при нажатии на пробел.

Я определил координаты x и y как глобальную переменную.

int xB = 0, yB = 0;

И вотфункция приращения.

#if TIMER_ON == 1
void onTimer(int v) {

    glutTimerFunc(TIMER_PERIOD / 30, onTimer, 0);
    if (xB < (WINDOW_WIDTH / 2) - 80)
        xB++;
    if (xK < (WINDOW_WIDTH / 2) - 100)
        xK += 2;
    glutPostRedisplay(); // display()

}
#endif

Я не знаю, какую функцию GLUT я буду использовать для остановки анимации.

1 Ответ

0 голосов
/ 25 октября 2018

Создайте обратный вызов glutKeyboardFunc(), который переключает isAnimating bool.Затем отметьте isAnimating в onTimer().

Например:

bool isAnimating = true;
void keyboard( unsigned char key, int x, int y )
{
    if( ' ' == key )
    {
        isAnimating = !isAnimating;
    }
}

void onTimer(int v)
{
    glutTimerFunc(TIMER_PERIOD / 30, onTimer, 0);
    if( isAnimating )
    {
        if (xB < (WINDOW_WIDTH / 2) - 80)
            xB++;
        if (xK < (WINDOW_WIDTH / 2) - 100)
            xK += 2;
        glutPostRedisplay(); // display()
    }
}

Не забудьте зарегистрировать обратный вызов через glutKeyboardFunc(keyboard), прежде чем позвонить glutMainLoop().

...