Как написать основной цикл игры? [закрыто]
Как написать основной цикл игры? Какие вещи вы должны делать в игровом цикле и какие вещи вы не должны делать в игровом цикле?
Я написал много их, но я никогда не читал об игровых циклах. Я уверен, что смогу их значительно улучшить, но я не уверен, как это сделать.
3 ответа
Основной игровой цикл обрабатывает три основные задачи:
- Получить пользовательский ввод
- Обновить состояние игры
- Нарисуйте игру
Простой игровой цикл просто объединяет эти три задачи в один цикл. Это приводит к некоторым нежелательным результатам:
- Игра работает с разной скоростью на разных компьютерах.
- CPU (может быть бесполезно) привязан к 100% использованию.
- «Состояние игры» /меню отсутствуют или смешаны с кодом игры.
- Основной игровой цикл очень длинный и сложный для поддержания.
- Код трудно распространять /переносить на другие платформы.
Расширенные игровые циклы адресуют перечисленные выше проблемы. Вот несколько полезных статей:
- игровой цикл deWiTTERS
- Интеграция таймера в игровой цикл >
- Управление игровыми состояниями на C ++
- XNA Game State Management и Управление сетевыми играми
- Понимание основного цикла игры
Для отличного примера игрового цикла взгляните на демо-игру Allegro skater:
Игровые петли часто выполняют один и тот же тип работы для большинства игр, поэтому я думал о способе создания обобщенной игровой среды. Лучше написать одну реализацию игрового цикла и делиться им между играми. Это экономит работу при создании новой игры, а улучшения общего игрового цикла могут использоваться всеми играми (например, добавление FPS-счетчика или функция захвата экрана).
Я бы рекомендовал статью Гленна Фидлера о надежной независимости кадров, « Исправить вашу временную шкалу! "
(Менее релевантный теме, но другие статьи в серии также неплохие - как и все на его сайте!)
Если вы хотите работать с игровыми циклами, я бы посоветовал прочитать эту старую статью о gamasutra о многопоточных архитектурах игровых движков. Он имеет дело с несколькими различными способами написания игрового цикла.
http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php