1

Qt + OpenGL で開発中のゲームに一時停止ボタンを実装しようとしています。

QTimerを使って実装したい。基本的には100ミリ秒ごとに画面を更新しています。ゲームを一時停止するために、ボタンを押すとタイマーを停止します。ボタンをもう一度押すと、タイマーが再び開始されます

ここに私のpauseOrPlayスロットがあります:

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

}

しかし、私は機能を得ていません。この特定のコードで画面が一時停止し、あちこちでいくつかの調整を試みると、画面が非常に速く更新されることがあり、これが原因であることがわかりましたが、どうにかして問題の解決策を見つけることができませんでした

ヘルプやポインタはありますか?

PS:この質問ではOpenGLについては何もありませんが、OpenGLタグを追加して、同様の考えを扱った可能性のある人々だと思います

4

1 に答える 1

1

その接続は悪い場所にあります。ゲームを一時停止または再開するたびに接続するように設定されています。ただし、複数回接続すると、スロットは信号の放出ごとに複数のタイルと呼ばれます。

タイマーを作成し、一度だけ接続するようにしてください。タイマーの構築とシグナル接続を GLWidget のコンストラクターに移動することをお勧めします。タイマーへのポインターをクラスのメンバー変数として格納して、クラスのメンバー関数で開始および停止できるようにします。

于 2013-03-27T16:39:25.710 に答える