Per aspera ad astra или RoadMap по вашей будущей игре. Godot 4 C# Часть 4 "Игровой цикл и структура".
«Я не могу создать то, чего не понимаю!»
После всех проделанных работ вы получите необходимую базу для старта разработки.
Что такое игра?
Игра – это программа. Любая программа нацелена на работу с данными. Работа с данными обычно сводится к нескольким этапам: хранение; получение; обработка; отображение; запись.
«Чтобы продать что-то ненужное, нужно купить что-то ненужное».
В нашем случае, чтобы работать с данными, нам нужно их сначала откуда-то получить. Данные для вашего приложения могут храниться в разных источниках: базы данных, файлы, облако, внешние сервисы (API).
Для офлайн-игр обычно это два варианта: базы данных в составе игры (SQLite) или локальные файлы (Resources). Обработка данных осуществляется вашим кодом и функциями движка. Отображение данных происходит посредством Node и Scene ( об этом позже ).
Вот и вырисовывается более-менее чёткое разделение на архитектурные слои. Подробнее обо всём позже, сейчас же важно понимание общих концепций.
Для обработки данных применяется игровой цикл. Упрощённо его можно представить как бесконечный цикл while(true).
В рамках одной итерации цикла обрабатывается один кадр. По факту: итерация = кадр. Движок постоянно проходит по этому циклу и проводит расчёты, в том числе выполняет ваш код.
Внутри цикла находятся методы (хуки жизненного цикла), которые позволяют вам «цепляться» к ним и вызывать ваш код на каждой итерации или в определённые моменты. Эти методы доступны вам из любой сущности, к которой привязан ваш скрипт.
Если представить стандартный проект игры, можно выделить функциональность, реализовав которую можно считать ваш проект полноценным:
- Стартовый экран и главное меню.
- Интерфейс управления графикой.
- Интерфейс управления звуком.
- Система сохранения
- Локализация (опционально)
- Экран основного геймплея
- Фоновая музыка
- Звуковые эффекты
- Экран окончания игры (опционально, можно показать результаты игры)
Итоги
Игровые данные хранятся в Resources. Данные из ресурсов можно получить ( система сохранения ) и обработать внутри игрового цикла, вызвав необходимый хук. Так как мы имеем определённый набор модулей, который необходимо реализовать, многие из этих модулей в дальнейшем можно будет переиспользовать для других проектов.
Спасибо за внимание!