Сделаем рестарт игры:
Видеоверсия: http://www.youtube.com/watch?v=K1AXaQ4AWK4
Текстовая версия является продолжением урока 31 с менюшкой. Видеоверсия – рестарт для нашего толстого платформера с tmx картой.
Создадим файл Game.h, закинем в него ф-цию menu() (хотя лучше и для неё создать menu.h), а так же создадим ниже функцию startGame(). В функцию startGame закинем все содержимое int main() , а в int main() пока пусть будет пусто.
Рестарт сделать можно несколькими способами. Например вот так:
Если нажали на Tab, то выходим из ф-ции startGame и возвращаем true. Если нажали Escape, то выходим из ф-ции startGame и возвращаем false.
При этом когда мы выйдем из ф-ции startGame – все объекты удалятся, закроется sfml окно.
Чтобы реализовать выход и перезагрузку впилим в цикле “пока открыто окно” вот такой код:
1 2 |
if (Keyboard::isKeyPressed(Keyboard::Tab)) { return true; }//если таб, то перезагружаем игру if (Keyboard::isKeyPressed(Keyboard::Escape)) { return false; }//если эскейп, то выходим из игры |
Мы должны выйти из этой функции startGame(), иначе если мы сделаем рекурсию в ней, то мы создадим второе окно с игрой. return true это и есть досрочный выход из функции.
Ниже функции startGame напишем функцию gameRunning() , которая и будет перезагружать игру, если это необходимо:
1 2 3 |
void gameRunning(){//ф-ция перезагружает игру , если это необходимо if (startGame()) { gameRunning(); }////если startGame() == true, то вызываем занова ф-цию isGameRunning, которая в свою очередь опять вызывает startGame() } |
Затем в int main напишем так:
1 2 3 4 5 |
int main() { gameRunning();//запускаем процесс игры return 0; } |
Ну и не забудьте подключить в main.cpp наш новый заголовочный файл Game.h
Все объекты удалятся, т.к деструктор автоматически вызывается компилятором в тот момент, когда объект выходит из области видимости, в данном случае мы выходим return’ом из функции startGame(), в которой хранятся все объекты.