2013-03-27 620 views
1

我想为我在Qt + OpenGL中开发的游戏实现暂停按钮。在Qt中使用QTimer在按钮上暂停功能按下

我想用QTimer来实现它。 基本上我每100ms更新一次屏幕。所以为了暂停游戏,我会按下按钮停止计时器。当再次按下按钮,我会启动定时器再次

这里是我的pauseOrPlay SLOT:

void Window::pauseOrPlay() 
{ 
    GLWidget::modifyTimer = TRUE; 
    GLWidget::isPaused = !GLWidget::isPaused; 

    GLWidget timerUpdater; 
    timerUpdater.timerFunc(); 
} 

,这里是我的timerFunc()

GLvoid GLWidget::timerFunc() 
{ 
    static QTimer *timer = new QTimer(this); 
    connect(timer, SIGNAL(timeout()), this, SLOT(update())); 

    if(GLWidget::isPaused) 
timer->start(100); 
    else 
timer->stop(); 

} 

但我没有得到的功能。我得到暂停屏幕上这个特殊的代码,并在尝试一些调整在这里和那里,有时我得到的屏幕更新非常快速度这向我指出this但我无法找到治愈我的问题在某种程度上

任何帮助或指针?

PS:在这个问题上没有什么关于OpenGL的,但我认为这些都是谁可能已经处理了类似思人,加入OpenGL的标签

回答

1

这种联系是一个不好的地方。您每次暂停或恢复游戏时都会设置连接。但是如果你连接多次,你的插槽将被称为每个信号发射的多个瓦片。

确保您只创建计时器并连接一次。我建议将计时器结构和信号连接移到您的GLWidget的构造函数中。将定时器的指针存储为类的成员变量,以便可以在类的成员函数中启动和停止它。

+0

你说的是正确的,但我有同样的按钮暂停和播放功能(只需更改图标)。那么你能建议其他的方法来暂停游戏吗? – Adorn 2013-03-27 16:49:46

+0

麻烦就在你试图进行初始化的地方。整体概念是确定的,即使是播放/暂停切换按钮。尽早建立连接。大多数连接应该在对象的构造函数中设置。这样确保连接只发生一次,确实很容易。 – cgmb 2013-03-27 17:30:40

+0

你是对的。有效。谢谢 – Adorn 2013-03-27 19:37:13