Microsoft xna framework что это

Обновлено: 01.07.2024

Содержание

Цели и описание проекта

Пакет Microsoft XNA, по словам представителей Microsoft, позволит разработчикам игр избежать многих технических трудностей, возникающих при написании кода, а также обеспечит существенное снижение стоимости конечной продукции. Кроме того, благодаря XNA программисты смогут создавать принципиально новые игры с высококачественной графикой. В ходе демонстрации, Microsoft показала два анимационных ролика, созданных с применением технологии XNA. В одном из них облако вздымающегося сигаретного дыма в режиме реального времени меняло свою форму и направление движения под действием внешних факторов. Другой ролик демонстрировал разлетающиеся в разные стороны детали разбившегося о стену автомобиля.

Инструментарий XNA изначально разрабатывался с целью максимально облегчить процесс разработки игр для консоли Xbox и компьютеров, работающих под управлением операционной системы Windows. Вместе с тем, пакет XNA позволит распространить общие сервисы Xbox Live, такие как, например, аутентификация, на игры для персональных компьютеров. Инструментарий XNA позволяет Microsoft конкурировать с Sony на рынке видеоигр для следующего поколения игровых приставок.

Обзор

XNA Framework

XNA Framework скрывает низкоуровневые технологические детали, связанные с разработкой игры. Таким образом, фреймворк заботится о разнице между платформами, позволяя разработчикам уделять больше внимания смысловому содержимому игры. XNA Framework интегрируется с несколькими инструментами, такими как XACT, для помощи в создании контента. XNA Framework предоставляет поддержку создания и двухмерных, и трёхмерных игр и позволяет использовать возможности контроллеров Xbox 360. Игры фреймворка XNA, предназначенные для платформы Xbox на данный момент могут быть проданы только членам клуба Microsoft XNA Creator’s Club [4] . Десктопные приложения могут распространяться бесплатно под текущим лицензированием Microsoft.

XNA Content Pipeline

XNA Game Studio

Лицензионное соглашение

EULA Microsoft XNA Framework 2.0 специально запрещает распространение коммерческих сетевых игр, которые соединяются с Xbox Live и/или Games for Windows Live без специального соглашения между Вами и Microsoft. XNA Game Studio может быть использована для разработки коммерческих игр и других программ для платформы Windows, но код Microsoft для поддержки сети Xbox/Windows Live не может быть использован. В своём проекте XNA можно использовать собственный код поддержки сети.

Игры, созданные с использованием XNA Game studio, на данный момент можно распространять через Xbox Live Community Games [12] [13] . Программное обеспечение также может быть использовано для создания коммерческих игр, предназначенных для Windows.

XNA Community Games

Microsoft также распространяет «тестовые аккаунты» для образовательных учреждений в рамках их программы DreamSpark. Эти аккаунты позволяют студентам разрабатывать игры для Xbox 360, но, чтобы выставить игру на Marketplace, требуется привилегированный аккаунт.

Наша задача, быстро ввести вас в курс дела, — что такое XNA, как его использовать. Статья рассчитана на людей уже имеющих определённый опыт программирования (но не знакомых собственно с XNA), и желающих кратко ознакомиться с платформой.

articles_xna_quickstart_p2 | XNA – Быстрый старт

Само название шутливый рекурсивный акроним «не являющийся акронимом». XNA — XNA's Not Acronymed.

  • обвёртку над DirectX (Direct3d, XINPUT, XACT);
  • каркас игрового приложения (классы Game, GameComponent, GameWindow);
  • набор вспомогательных классов/структур для работы с векторами, матрицами, лучами, кватернионами, а также разные математические функции в дополнение к стандартному System.Math;
  • инфраструктура Content Pipeline — специфической контент сиcтемы XNA.

При помощи XNA на данный момент можно разрабатывать игры для Windows (XP, Vista, 7), XBOX360, а также ZUNE (но только 2D, так как текущие модели ZUNE не поддерживают 3D).

Почему XNA?

  • XNA Game Windows
  • XNA Game XBOX
  • XNA Game ZUNE
  • XNA Game Library (Windows,XBOX,ZUNE)
  • XNA Content Pipeline Extension Library

art_xna_qst_p3 | XNA – Быстрый старт

Собственно, минимальные проекты игр для разных платформ и минимальные проекты библиотек, с уже подключёнными референсами на сборки библиотек XNA. Кроме того, в зависимости от версии XNA Game Studio в типах проектов будут также доступны «starter-kits» — маленькие примеры готовых игр.

Как уже было сказано, XNA включает готовый каркас игрового приложения. Минимальный проект XNA игры в самом начале уже умеет инициализировать окно приложения и инициализировать устройства.

Основа каркаса – это класс Game, который используется как базовый в основе каждой игры. Класс Game содержит абстрактные методы типа – Draw, Update, LoadContent, UnloadContent, Initialize и так далее. То есть, каждая конкретная игра наследуется от этого класса и переопределяет важные методы (события сущности Game) своим кодом. Кроме того свойствами базового класса Game выступают такие класы как GameWindow, GraphicDevice и другие.

Минимальный проект обычно уже умеет крутить игровой цикл, производить очистку экрана заливая приятным цветом, а также закрываться при нажатии определённой кнопки. Далее вам лишь необходимо заполнить методы Update и Draw своим кодом. И осуществить загрузку контента на LoadContent.

  • контент и его загрузка, то главное, из чего состоит игра, картинки, звуки, и так далее;
  • вывод графики – 2D или 3D;
  • обработка управления – мышка, клавиатура, геймпады;
  • вывод аудио – звуки и музыка;
  • игровая логика и взаимодействие всего выше перечисленого (это, к счастью, не относится к теме статьи ;));

Будем разбирать по порядку.

Одна из главных особенностей XNA — специфическая система работы с контентом.

Заключается она в наборе специальных «контент процессоров» и «контент импортеров» (кроме использования стандартных вы можете добавлять и свои).

Задача контент импортеров — превращение (на этапе компиляции) контента из внешнего поддерживаемого формата во внутреннее привычное для XNA представление.

Проще говоря, к примеру добавленные в проект текстуры в формате dds, bmp и png в момент компиляции будут все переведены в один общий для текстур внутренний формат. Такой подход позволяет не зависеть от того в каком виде изначально представлен контент, скажем если вам вдруг понадобилось использовать модели формата Quake3 (.md3), вам нужно будет только написать дополнительный контент импортер, а в конечном виде модели не будут иметь ничего общего с изначальным форматом.

Задача контент процессоров — преобразование контента из внутреннего представления (файлов), в объекты управляемого (managed) кода. То есть, по сути сама загрузка контента в память на этапе исполнения.

Если вам это кажется излишни сложным для начала — не стоит беспокоится, XNA уже содержит готовые импортеры и процессоры для основных типов контента.

Обычно контент добавляется в проект через Solution Explorer студии, в специальную папку “Content”. Там же для каждого файла назначается (панель Properties при выборе конкретного файла) тот или иной процессор и импортер. Таки образом студия берёт на себя автоматизацию процесса компиляции контента.

art_xna_qst_p4.jpg | XNA – Быстрый старт

Со стороны управляемого кода контент уже представлен классами Texture, Texture2D, Model, ModelMesh, Effect и другими.

Саму загрузку в коде следует осуществлять при помощи класса ContentManager (уже представленый полем Content класса Game), и советуют её осуществлять в методе LoadContent класса Game (точнее вашего класса — предка Game).

  • текстуры — bmp, dds, dib, hdr, jpg, pfm, png, ppm, и tga;
  • модели — x, fbx;
  • аудио — wav, mp3(с версии xna 3.0);
  • шейдеры — fx.
  • модели;
  • текстуры;
  • растровые шрифты (автоматическая генерация из системных и на основе текстур);
  • эффекты (шейдеры);
  • звуки и музыка(класс Song).

Особняком стоит также система аудио контента на базе Microsoft XACT, но начиная с версии XNA 3.0 кроме этого подхода также обеспечивается параллельно стандартный (такой же как для текстур и моделей) способ работы со звуками.

Помимо того, что вам доступен GraphicsDevice — по сути то же Direct3D устройство, доступное «любителям попрограммировать на DirectX под с++», у нас также есть несколько готовых инструментов от XNA.

Для 3D — это группа состоящая из классов: ModelMesh, Model и Effect. А для 2D это специальный класс SpriteBatch.

Далее коротко обо всём.

Вывод 2D графики и текста при помощи SpriteBatch

Делается очень просто по средствам класса SpriteBatch. Всё что вам нужно сделать, это создать экземпляр SpriteBatch (в минимальном проекте обычно уже есть один такой).

  • начинаем работу при помощи SpriteBatch.Begin().
  • далее нужное вам количество раз вызываем SpriteBatch.Draw() для того, чтобы нарисовать каждый спрайт.
  • и в конце при помощи SpriteBatch.End() – завершаем процесс.

Метод SpriteBatch.Draw() — по сути, рисует всю текстуру или её фрагмент на экране.

В качестве параметров SpriteBatch.Draw() может принимать позицию на экране, где будет выведена текстура, поворот, наклон, масштаб. Также класс SpriteBatch поддерживает автоматическую сортировку по Z координате. Сама текстура передаётся в метод SpriteBatch.Draw() в виде референса на класс Texture2D которые вы предварительно должны были получить, в результате загрузки контента.

SpriteBatch также содержит метод DrawString(), который аналогичен методу Draw(), за исключением того, что вместо текстуры он принимает как параметр растровый шрифт (объект класса SpriteFont), а также строчку текста, которую необходимо вывести.

Вывод 3D графики

Разработчики XNA решили избавиться от фиксированного графического конвейера, который широко использовался в MDX и MDX2. В XNA используется программируемый графический конвейер, то есть в основе процесса рендеринга — шейдер (по правде говоря, и в середине SpriteBatch лежит надстройка над конвейером и свой специальный шейдер). Как результат, если вы знакомы с данным подходом, работа с 3Д в XNA для вас не будет сложна.

Итак, за рендеринг у нас должен отвечать шейдер. К счастью в XNA уже реализован простой шейдер BasicEffect (практически обеспечивает тот минимум, что был доступен с фиксированным конвейером).

Предварительно добавив модель в контент, и загрузив её, вы уже должны иметь объект класса Model. Такая модель в свою очередь содержит набор мешей (класс ModelMesh).

Всё, что нам нужно сделать, это перебрать все объекты класса ModelMesh в нашей модели, назначить (обычно он уже назначен) в качестве шейдера — BasicEffect. Далее, передать в шейдер необходимые параметры (в обязательном порядке — матрицы View, Projection и World). И в конце вызвать у каждого ModelMesh'а метод Draw.

Тут всё предельно просто. Набор классов со статическими методами, и несколько перечислений. А именно — классы Keyboard, Mouse, GamePad, каждый их них отвечает за своё устройство. У каждого из них есть метод GetState(), который возвращает соответственно KeyboardState, MouseState, GamePadState, содержащие информацию о состоянии устройств ( к примеру позиция Х, Y курсора мыши, или состояние кнопки клавиатуры в текущий момент).

Всё, что вам нужно — в Update проверять состояние устройства, и соотвественно работать с игровой моделью.

Тут у нас хитрая история. Изначально звук в XNA (1.0-2.0) был возможен только при помощи XACT проектов.

Они создавались в отдельном редакторе, идущем вместе с XNA Game Studio. Такой проект содержал набор аудио файлов(точнее относительных ссылок на них, на диске), набор поименованных сущностей – звуков, каждый соответствовал тому или иному аудио файлу, а то и нескольким (случайный выбор конечного звука по таблице с вероятностями). Привязка звуков к группам (например, «Музыка» и «Эффекты», с отдельной регулировкой громкости на каждую). Ну, и так далее.

art_xna_qst_p5 | XNA – Быстрый старт

После чего XACT проект добавлялся в игру через специальный процессор и импортер, и работа дальше шла через специальный класс XNA – AudioEngine.

В версии XNA 3.0 появились новые классы: Song, SoundEffect. Новый контент процессор и импортер к ним (за одно и поддержка mp3 как внешнего формата). Появился класс MediaPlayer для воспроизведения музыки (с поддержкой очереди песен).

Работа со звуком упростилась, и в принципе стала на уровень с текстурами и моделями. Всё, что нужно – добавить звук в контент, установить нужный контент процессор/импортер, установить нужное имя (asset name), в коде загрузить в объект нужного типа, когда нужно – воспроизвести.

На этом с основными частями всё, конечно, каждый пункт можно раскрыть подробней, что возможно и будет сделано в будущем.

Напоследок ещё пару важных пунктов.

Кроме того, пользователь должен обладать видео-картой с поддержкой шейдеров 1.1 минимум.

Последняя версия XNA Game Studio на данный момент, а именно 3.1, доступна тут.

Читайте также: