netlib.narod.ru< Назад | Оглавление | Далее >

Поток выполнения программы

Погрузившись в разработку своего проекта вы можете оказаться погребенными под грудой рутинной работы, такой как модификация кода для того, чтобы он работал с чем-нибудь, что вы добавили, удалили или изменили. Эти работы отнимают драгоценное время, которое лучше потратить на разработку самой игры.

Если вы начнете разработку точно зная свои потребности, то будете в состоянии структурировать ход выполнения операций в программе (называемый потоком выполнения программы — program flow) и обеспечите легкость внесения изменений. Поскольку вы уже написали проектную документацию (вы ведь сделали это, не так ли?), осталось сделать совсем немного — построить структуру потока обработки.

Обычная программа начинается с инициализации всех систем и данных, а затем переходит к главному циклу. Главный цикл — это то место, где происходит большая часть событий. В зависимости от текущего состояния игры (титульный экран, меню, непосредственно игра и т.д.) вы должны по разному интерпретировать поступающие от пользователя данные и формировать результат их обработки.

Вот этапы, которые проходит стандартное игровое приложение:

  1. Инициализация систем (Windows, графика, устройства ввода, звук и т.д.).

  2. Подготовка данных (загрузка конфигурационных файлов).

  3. Настройка исходного состояния (обычно титульный экран).

  4. Запуск главного цикла.

  5. Определение состояния и обработка путем получения входных данных, их обработки и формирования выходных данных.

  6. Возвращаемся к этапу 5, пока работа приложения не прервана, а потом переходим к этапу 7.

  7. Очистка данных (освобождение памяти и т.д.).

  8. Освобождение системных ресурсов (Windows, графика, устройства ввода и т.д.).

Шаги с 1 по 3 обычны для всех игр: инициализация различных систем, загрузка необходимых файлов (графических, звуковых и т.д.) и подготовка к запуску самой игры. Большую часть времени ваше приложение будет проводить выполняя внутриигровую обработку (шаг 5), которая может быть разделена на три части: подготовка к обработке кадра, обработка кадра и завершение обработки кадра.

Во время подготовки к обработке кадра выполняется ряд небольших задач, таких как получение текущего времени (для связанных со временем событий, например, синхронизации) и другие частности (например, обновление игровых элементов). Обработка кадра посвящена обновлению объектов (если это не было сделано во время подготовки к обработке кадра) и визуализации графики. Завершение обработки кадра имеет дело с оставшимися функциями, такими как синхронизация по времени или отображение визуализированной графики.

Здесь вас ждет ловушка. В вашей игре может быть несколько состояний обновления кадра: одно для главного меню, другое для самого игрового процесса и т.д. Поддержка нескольких состояний может привести к запутанности кода, но техника, известная как обработка состояний (state processing) может облегчить бремя. Об обработке состояний мы подробнее поговорим в разделе «Состояния приложения» далее в этой главе.

Очиска данных и выключение систем (шаги 7 и 8) освобождают все системы и ресурсы, выделенные при запуске игры. Необходимо освободить занятую графикой память, уничтожить окно приложения и т.д. Пропускать эти шаги нельзя, так как без них ваша система может остаться в нестабильном состоянии, что приведет к краху!

Каждый этап потока выполнения программы представляется соответствующим блоком кода, поэтому чем лучше структурирован код, тем легче создавать приложение. Для лучшей структуризации кода можно использовать технику программирования известную как модульное программирование (modular programming).


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz