Pregunta

I am trying to implement pause button for a game I am developing in Qt + OpenGL.

I want to implement it using QTimer. Basically I am updating screen per 100ms. So in order to pause game, I will stop the timer on button press. and when button is again pressed i will start the timer again

Here is my pauseOrPlay SLOT:

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

  GLWidget  timerUpdater;
  timerUpdater.timerFunc();
}

and Here is my 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();

}

But I am not getting the functionality. I get paused screen on this particular code and upon trying few tweaks here and there, sometimes I get screen updating very fastly which pointed me to this but I was unable to find cure to my problem somehow

Any help or Pointers?

PS: In this question there is nothing about OpenGL, but I think those are the people who might have dealt with similar think, adding OpenGL tag

¿Fue útil?

Solución

That connection is in a bad place. You have it set up to connect each time you pause or resume the game. But if you connect multiple times, your slot will be called multiple tiles for each signal emission.

Make sure you only create the timer and connect to it once. I suggest moving the timer construction and signal connection into your GLWidget's constructor. Store a pointer to the timer as a member variable of your class so you can start and stop it in the class's member functions.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top