2013-11-16 6 views
1

Я сделал игру, в которой используется игровой цикл. Теперь я пытаюсь реализовать GUI для этой игры в wxWidgets.Есть ли способ передать wxWidget GUI на wxThread?

Проблема в том, что при инициализации графического интерфейса управление программой остается в цикле GUI и не переходит в игровой цикл.

Итак, могу ли я сделать графический интерфейс в своей собственной теме?

ответ

5

Вы можете, но оставить весь код, который взаимодействует с графическим интерфейсом основного потока/EDT (Event Dispatch Thread). Параллельный доступ к элементам GUI не предназначен по дизайну и вызовет проблемы. Вместо этого поставьте игровой цикл в wxThread и отпустите соответствующие события. Затем эти события могут обрабатываться на EDT для обновления графического интерфейса или для рендеринга кадра.

Другим решением было бы, чтобы вызвать одиночные итерации игрового цикла на основной теме, используя wxTimer.

Примечание:

  • Дроссель игровой цикл или сливаться события, если это необходимо. wxTimer отлично поддерживает дросселирование по частоте и объединение событий обновления. В отдельном потоке вам нужно будет спать в течение оставшегося времени желаемого времени цикла/итерации или ждать семафора, вызванного основным потоком.
  • Реализовать доступ для совместного использования данных, таких как состояние игры, с объектом синхронизации, например wxMutex. Вместо этого вы можете использовать std::mutex и std::thread из C++ 11.

Примеры: