使用 GLUT 用键停止动画?

Posted

技术标签:

【中文标题】使用 GLUT 用键停止动画?【英文标题】:Stopping animation with a key using GLUT? 【发布时间】:2018-10-25 15:12:05 【问题描述】:

我设计了一个在坐标 x 上加速的不明飞行物。但是,我想停止动画 - 我的意思是当我按下空格键时增加 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】:

创建一个切换 isAnimating 布尔值的 glutKeyboardFunc() 回调。然后在onTimer()中检查isAnimating

例如:

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) 注册回调。

【讨论】:

以上是关于使用 GLUT 用键停止动画?的主要内容,如果未能解决你的问题,请参考以下文章

鼠标点击开始动画 OpenGL/GLUT C++

动画停止和延迟

如何停止CSS3的动画

动画没有停止使用 UIView.animate

使用 Button 触发的动画停止添加 onAppear 的 repeatForever 动画

UIButton长按做动画,松开时动画停止[关闭]