使用 GLUT 按键停止动画?

Stopping animation with a key using GLUT?

我设计了一个在坐标 x 中加速的 UFO。但是,我想停止动画 - 我的意思是当我按下空格键时增加 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 函数来停止动画。

创建一个 glutKeyboardFunc() 回调来切换 isAnimating 布尔值。然后检查 isAnimatingonTimer().

例如:

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()
    }
}

不要忘记在调用 glutMainLoop() 之前通过 glutKeyboardFunc(keyboard) 注册回调。