Я пытаюсь реализовать кнопку паузы для игры, которую я разрабатываю в 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
Эта связь в плохом месте. Он настроен на подключение каждый раз, когда вы останавливаетесь или возобновляете игру. Но если вы подключаетесь несколько раз, ваш слот будет называться несколькими тайлами для каждого излучения сигнала.
Убедитесь, что вы только создаете таймер и подключаетесь к нему один раз. Я предлагаю перенести конструкцию таймера и сигнальное соединение в конструктор вашего GLWidget. Сохраните указатель на таймер как переменную-член вашего класса, чтобы вы могли запускать и останавливать его в функциях-членах класса.
Других решений пока нет …