[Главная] [Новости] [Статьи] [Игры] [Проекты] | [Автор] | |||
Разработка загрузчика игровой сцены | ||||
Начнём с того для чего вообще нужен загрузчик? Если Вы когда-нибудь пробовали создавать свою игру для какой-либо платформы, то может быть и сможете ответить на этот вопрос или сказать, что он вообще не нужен. Если Ваша игра действительно очень простая аркада или логика и содержит мало загружаемых игровых моделей, то загрузчик в принципе не нужен вообще, но это только на первых порах. При создании более продвинутых (и уже не демо) проектов обязательно потребует начилия загрузчика. Проблема его наличия тривиально проста: во время загрузки игровых объектов (моделей, текстур) и построения из них игровой сцены пользователь не должен скучать сидя за черным экраном приложения, иначе он может просто подумать, что игра "глюкнула" и зависла. Поэтому показ хоть какой-либо активности (даже просто надписи: "Загрузка") дает возможность пользователю успокоиться и ждать окончания загрузки, еще лучше бы иметь и полосу прогресса загрузки, но это в принципе не обязательно. |
||||
Итак, Мы пришли к мнению, что загрузчик игровой сцены, выводящий какую-либо заставку на время загрузки игровой сцены нам просто необходим. Как же его правильно сделать? Сначала вспомним о природе всех игровых приложений: методы Render и FrameMove в них выполняются периодически через определенные интервалы времени. Вся логика приложения привязана к этой периодичности. Но загрузка ресурсов должна происходить лишь один раз (а не периодически повторяясь). Вот эту ГЛАВНУЮ! задачу и должен решать загрузчик, а уж показ заставки для пользователя - это, вообщем-то его второстепенная задача. Итак, загрузка объектов игровой сцены должна производиться для текущей сцены и не во время старта приложения, а чуть позднее, например после выбора пункта меню Начать игру. Следовательно потребуется специальный объект-загрузчик отображающий экран загрузки во время выполнения фактической загрузки ресурсов игровой сцены. |
||||
Не мудрствуя лукаво назовем наш класс загрузчика TSceneLoader. Смысл загрузчика TSceneLoader - показ экрана загрузки во время фактической загрузки ресурсов сцены или преамбулы сцены. Основная задача: огранизация загрузки и уничтожения объектов игровой сцены во время ее создания или удаления ОДНОКРАТНО в отличие от периодически вызываемых методов Render и FrameMove. |
||||
Как создается и существует сам загрузчик? Загрузчик является объектом приложения Создается во время старта и инициализации Уничтожается при уничтожении приложения |
||||
Организация процессов загрузки и уничтожения - - Проверка поля State; - StartGameScene - - внутри StartGameScene:
- по завершении загрузки смена состояния на slLoaded - инициализация загруженного объекта - переключение в состояние отрисовки (Render) и подготовки кадра (FrameMove) для загруженного объекта - проверка поля State, при смене значения поля методами загруженного объекта переход на начало данной последовательности. При завершении приложения выставляется особое состояние завершения, выполняющее уничтожение объекта в поле GameScene и возвращение управления объекту приложения путем переключения в новое состояние приложения.
|
||||
Реализация загрузчика Во время старта приложения создается объект загрузчика - TD3DGameApp.Create - SceneLoader
:= TSceneLoader.Create; в методах Render и FrameMove во время установки состояния m_dwAppState - asSceneLoader вызываются соответствующие методы загрузчика (см. ниже) При создании объекта загрузчика его поля устанавливаются в исходное состояние Методы Init, Restore, Invalidate, Delete вызываются объектом GameUI приложения При переходе в состояние выбора игровой сцены - asActive выбор соответствующей игровой сцены (если она доступна) вызывает установку для свойства загрузчика нужной сцены - SceneLoader.Scene := sScenePre1; и переключение в состояние приложения asSceneLoader Загрузчик работает следующим образом - Внутри его метода DoRender происходит отображение экрана загрузки или нужной игровой сцены в зависимости от состояния FState Внутри метода DoFrameMove методом NewScene фиксируется смена указателя загружаемой сцены (Scene) при этом Если произошла смена загружаемой сцены (а это могут сделать как объекты приложения, так и объекты загруженной игровой сцены) запускается метод StartGameScene внутри него очищается от старой сцены объект GameScene, методом LoadScene загружается новая сцена метод FrameMoveScene производит формирование анимации и другие полезные действия в зависимости от состояния загрузчика |
||||
|
||||
[Назад] [Все уроки] | ||||
[Главная] [Новости] [Статьи] [Игры] | ||||
(c) Мега Информатик 2006-2008 |