【问题标题】:pause functionality in Qt using QTimer on button press按下按钮时使用 QTimer 在 Qt 中暂停功能
【发布时间】:2013-03-27 16:33:28
【问题描述】:

我正在尝试为我正在使用 Qt + OpenGL 开发的游戏实现暂停按钮。

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

这是我的 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();

}

但是我没有得到这个功能。我在这个特定的代码上暂停了屏幕,并且在这里和那里尝试了一些 tweaks,有时我的屏幕更新非常快,这将我指向this,但我无法以某种方式找到解决我的问题的方法

任何帮助或指针?

PS:在这个问题中没有关于 OpenGL 的内容,但我认为那些可能已经处理过类似想法的人,添加 OpenGL 标记

【问题讨论】:

    标签: c++ qt opengl game-engine qtimer


    【解决方案1】:

    那个连接是在一个糟糕的地方。您已将其设置为在每次暂停或恢复游戏时进行连接。但是如果你连接多次,你的槽会被称为每次发射信号的多个瓦片。

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

    【讨论】:

    • 您所说的是正确的,但我有相同的暂停和播放功能按钮(只需更改图标)。那么你能推荐其他暂停游戏的方法吗?
    • 问题出在你试图初始化的地方。整体概念还可以,即使是播放/暂停切换按钮也是如此。尽早建立连接。大多数连接应该在对象的构造函数中设置。这样就很容易确保连接只发生一次。
    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多