Я согласен с другими постерами в этой теме в том, что ваша основная функция должна быть максимально постной.Вы хотите, чтобы он просто породил новый экземпляр вашей игры, и пусть игровой цикл или менеджер управления состоянием позаботятся обо всем остальном.По сути, все сводится к следующему:
class Game{
Game();
~Game();
int OnExecute();
};
int Game::OnExecute(){
while(running){
// do game stuff
}
return 0; // No errors, game closed correctly.
}
int main(int argc, char* argv[]){
Game myGame;
myGame.OnExecute();
}
Все ваши методы / код инициализации содержатся в функции OnExecute до того, как игра войдет в свой основной цикл.В этом основном цикле while(running)
вы переводите вызовы в функции обновления и рендеринга для каждого кадра, которые управляют логическими вычислениями, такими как положение объекта, обновление физики, обновление ИИ и т. Д., А затем вы визуализируете все для этого кадра.Это, очевидно, ультра-упрощенная стратегия, но она определенно помогла мне понять, как именно работают игровые движки.
Теперь, что касается Qt, я попробовал именно то, что вы пытаетесь, и это не легко.Qt, хотя он может быть настроен для работы с внутриигровыми интерфейсами и т.п., мне кажется, в первую очередь предназначен для использования в приложениях, а не в играх.Он обеспечивает отличную функциональность, если вам нужны простые формы и кнопки в вашей программе, но если вам нужны индивидуально разработанные HUD и тому подобное, вам нужно искать в другом месте, чтобы избавить себя от множества хлопот.Однако существует огромное количество расширяемых графических библиотек, специально предназначенных для игр.Я бы посоветовал искать тот, который основан просто на OpenGL, так как большинство графических / игровых движков построены на нем и будут довольно хорошо интегрироваться.