2.2. Application Model
В расширенном каркасе высокоуровневых классов и, в частности, в Application Model (Модель приложения) реализована общая структура работы модели приложения. Этот набор компонентов позволяет автоматизировать процесс создания игры и создает за вас механизм реализации оконного или полноэкранного приложения, организует необходимый в игре таймер, обрабатывает различные сообщения, управляет процессом рисования сцены на экране монитора (рендиринг), загрузкой ресурсов игры и т. д.
Все перечисленные элементы преподносятся вам в виде готового шаблона игры с небольшим количеством строк исходного кода, в которые вам необходимо вставлять свой код игры. То есть за вас создается полнофункциональный каркас игрового приложения, готовый к «употреблению». Например, давайте посмотрим на исходный код каркаса игры, созданный шаблоном XNA Game Studio Express и Visual C# Express, представленный в листинге 2.1.
/// <summary>
/// Здесь происходит обновление состояния игровых объектов, логики, звука,
/// получение событий с устройств ввода и так далее
/// Метод реализует простой таймер
/// </summary>
protected override void Update(GameTime gameTime)
{
// Обработка событий, получаемых с джойстика
if(GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// Добавьте свой код для обновления состояния игровых объектов
// Это таймер
base.Update(gameTime);
}
Класс Game1 описан в файле с расширением *.cs (Game1.cs). Расширение в данном случае указывает на то, что используется язык программирования С#. Весь исходный код создан шаблоном, а перевод комментариев на русский язык осуществлен в вольной форме. Класс Game1.cs создал за нас полное игровое оконное приложение с методами для загрузки графической составляющей игры, инициализации данных, систему вывода сцены на экран, систему обновления состояния игры (таймер) и даже обработку событий, получаемых с джойстика. Неплохо, не правда ли? Более подробно с классом Game1 мы начнем знакомиться в следующих главах, когда приступим к работе над своей игрой.
2.3. Компонент Content Pipeline
Одной из важнейших составляющих любой программы является графический и игровой контент, который включает в себя различные графические изображения (текстуры, спрайты…), звуковые файлы, модели и материалы. Если вспомнить методику загрузки графики в DirectX, то станет понятно, почему в XNA уделено этому большое внимание.
В DirectX, чтобы загрузить модель, приходилось писать десяток другой строк исходного кода! Более того, загружать можно было только определенные графические файлы, которые DirectX понимал. Для остальных моделей и изображений приходилось писать свои экспортеры или искать инструменты для конвертирования контента в необходимый формат данных.
Используя XNA Framework и Content Pipeline (Конвейер контента), который входит в пространство имен Microsoft.Xna.Framework.Content, вам не нужно беспокоиться о том, в каком формате представлено изображение или модель. Вы просто пишете пару строк исходного кода, и ваш графический контент будет успешно загружен в игру внутренними средствами конвейера. В главе 6 мы подробно остановимся на этом вопросе.
Конвейер контента понимает следующие форматы:
Трехмерные модели – формат X и формат FBX. Формат Х – это всем известный Х(файл, или мэш. Формат FBX – относительно новый формат в игровой индустрии, продвигаемый компанией Autodesk, и поскольку эта же компания является создателем всем известного инструментария 3DMAX Studio, то сомнений в дальнейшем распространении этого формата нет. На сайте компании Autodesk можно бесплатно скачать плагин и конвертер для преобразования сделанной модели в 3DMAX Studio до версии 8 в формат FBX. В 3DMAX Studio 9 все перечисленные средства встроены по умолчанию.
Графические изображения – поддержаны наиболее распространенные графические форматы DDS, BMP, JPG, PNG и TGA.
Материал – имеется поддержка формата FX, или формата шейдеров.
Аудиоформат – осуществлена поддержка работы с проектами, созданными при помощи XACT. Подробно о самом формате и загрузке в игру звуковых данных вы узнаете в главе 13.
Как видите, список поддерживаемых форматов достаточно большой и внушительный, но главное – это простота загрузки, например текстуры или модели в игру. Посмотрите на пример двух строк исходного кода, загружающих в программу графическое изображение и модель.
private Texture2D mySprite;
private Model myBoll;
…
mySprite = content.Load<Texture2D>(“sprite”)
myBoll = content.Load<Model>(“boll”);
В последних двух строках этого блока кода мы загрузили в программу из корневого каталога проекта графическое изображение и модель (для дополнительной или вложенной папки используется следующая запись «Имя_папки\\boll»). Вот и все, теперь вы можете использовать загруженные элементы для вывода на экран монитора (о том, как это сделать, в следующих главах).
Если представить себе абстрактно внутренний принцип работы Content Pipeline и то, как происходит загрузка контента в игру и его преобразование, то можно перейти к следующей схеме (рис. 2.3). Как видно из этого рисунка, весь игровой контент проходит через конвейер импорта и преобразования данных, после чего на выходе в проекте получаются файлы со специфическим расширением XNB и XACT для звуковых данных. На этапе запуска игры в игровом процессе принимают участие именно преобразованные файлы с расширением XNB и XACT. Все преобразования контента происходят внутренне, без вашего участия и на этапе компиляции проекта в Visual C#.