2013-03-27 624 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