что такое xna framework

Что такое xna framework

Что же всё-таки представляет собой XNA framework (далее просто XNA)?

XNA — это надстройка над неуправляемым (классическим) DirectX. Во всяком случае такую картину можно наблюдать для операционной системы Windows. Дело в том, что XNA является кроссплатформенной библиотекой.
Библиотека разрабатывалась корпорацией Microsoft с целью создания единого инструмента для разработки игр на двух не совместимых платформах, принадлежащих той же компании. А именно: Microsoft Windows и Microsoft XBOX360.
В связи с этим XNA framework не является банальным враппером.
Во-первых, XNA предоставляет такие возможности, которые в DirectX в принципе не нужны. Например, работа с файловой системой в DirectX-приложениях происходит с помощью использования стандартных библиотек ОС Windows. В XNA же для этих целей предусмотрены специальные классы, которые так же легко работают на XBOX360, как и на Windows.
Во-вторых, математические классы XNA не являются обвёртками над неуправляемым DirectX, а полностью реализованы с нуля. Что, в большинстве случаев, позволяет добиться производительности на уровне классического DirctX.
В-третьих, используя специализированные классы библиотеки программист может лишить себя «удовольствия» писать обработчики на такие задачи, как обработка потери устройства, загрузка/выгрузка контента (модели, текстуры и др.), организация игрового цикла и многие другие «прелести», которые очень сильно омрачали жизнь каждому начинающему игроделу (профи от них, наверное, тоже не в восторге).
В-четвёртых, для этой библиотеки имеется среда разработки XNA Game Studio. При этом Express Edition (бесплатная версия) содержит, кроме основного функционала, так называемые Starter Kit’ы — заготовки в виде простых игр, которые можно использовать, как для обучения, так и для принятия их за основу своих игр.

Подробнее о возможностях XNA Game Studio я расскажу в следующих статьях. А сейчас только скажу, что для написания статей я использую XNA Game Studio Express Edition v2.0 Так же необходимо указать, что XNA Game Studio требует для своей работы установленный Visual C# 2005 Express Edition с обновлениями до SP1

На что способен XNA framework?

На многое. Что бы не разводить болтологию и дать читателю первое представление о возможностях библиотеки, я решил в эту статью включить таблицу с описанием основных пространств имён XNA framework

Microsoft.XNA.FrameWork Математические расчеты: матричная алгебра, аналитическая геометрия, проверка столкновений и т.д. В Managed DirectX эта функциональность (в урезанном виде) реализовывалась посредством библиотеки D3DX, являющейся частью DirectX. XNA Framework выполняет математические расчеты собственными средствами, что в некоторых случаях несколько повышает производительностью благодаря отсутствию накладных расходов взаимодействия с COM. Microsoft.XNA.FrameWork.Graphics Работа с графикой. В данном пространстве имён находятся все основные классы для работы с двухмерной и трёхмерной графикой. Например, класс графического устройства. Аналог в DirectX — Direct3D Microsoft.XNA.FrameWork.Audio Работа со звуком. Аналог в DirectX — DirectSound Microsoft.XNA.FrameWork.Input Работа с устройствами ввода: клавиатура, мышь, джойстик и тд. Аналог в DirectX — DirectInput Microsoft.XNA.FrameWork.Storage Работа с файловой системой текущей платформы: загрузка и сохранение настроек приложения, сохранение и загрузка игры и другое. Аналога в DirectX не имеется. Это объясняется тем, что DirectX — не кроссплатформеная библиотека. Следовательно все операции с файловой системой ложаться на стандартные функции API Microsoft.XNA.FrameWork.Game Организация цикла игрового приложения : загрузка контента, запуск рендеренга и тд. и тп. Аналога в DirectX я не знаю. В принципе, без этих возможностей можно обойтись, но в конце всё равно прийдётся писать что-то своё подобное

Но не думайте, что я описал хоть десятую часть всех пространств имён библиотеки или всех её возможностей. В дальнейшем мы будем подробней рассматривать те или иные возможности XNA.

И на последок я хотел бы ответить на такой вопрос.

Какие технические характеристики и требования XNA framework?

Ну, во-первых, XNA построена полностью на принципе программированного конвеера. То есть разработчики полностью отказались от фиксированного конвеера и тем самым ужесточили требования к аппаратному обеспечению компьютера. А именно, библиотека может функционировать только если видеокарта поддерживает, как минимум, Pixel Shader v1.1. Но это не сильно должно нас волновать, так как поддержка этой технологии есть у видеокарт начиная с Geforce 2 (кроме серий MX)
Во-вторых, XNA поддерживает фрагментные (пиксельные) шейдеры от версий 1.1 до 3.0 Это объясняется тем, что основа XNA — DirectX 9.0c, а так же тем фактом, что XBOX360 поддерживает шейдеры только до версии 3.0 В связи с этим, в ближайшее время, не предполагается добавление поддержки шейдеров 4-ой версии (DirectX 10)
Что же относительно остального, то возможности XNA практически такие же, как и у DirectX 9.0c

Так же следует указать, что официально XNA Game Studio поддерживает только такие операционные системы: Windows XP SP2 и Windows Vista

Ну и на последок, я думаю, тут не помешает несколько ссылок на тематические сайты.

Источник

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

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

Так что же такое XNA?

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

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

Почему XNA?

C чего начать?

Вам нужно иметь уже установленную Microsoft Visual Studio 2008 или же бесплатную версию – Microsoft Visual C# 2008. Должна быть в наличии видеокарта с поддержкой DirectX 9.0c и как минимум шейдеров версии 1.1. (разработчики XNA отказались от фиксированного графического конвейера, в связи с чем минимальная версия шейдеров 1.1 является обязательным требованием). В добавок желательно иметь свежую версию DirectX, например за ноябрь 2008 года вполне подходит. Если эти условия выполнены, можете наконец перейти к установке XNA Game Studio (в конце статьи приведены ссылки на актуальные версии).

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

Минимальный проект

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

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

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

Ближе к делу

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

Загрузка контента

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

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

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

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

Читайте также:  что делать чтобы пруд не зарастал тиной

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

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

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

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

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

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

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

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

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

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

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

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

Метод 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. Такой проект содержал набор аудио файлов(точнее относительных ссылок на них, на диске), набор поименованных сущностей – звуков, каждый соответствовал тому или иному аудио файлу, а то и нескольким (случайный выбор конечного звука по таблице с вероятностями). Привязка звуков к группам (например, «Музыка» и «Эффекты», с отдельной регулировкой громкости на каждую). Ну, и так далее.

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

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

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

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

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

Запуск игры на машине пользователя

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

Ccылки

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

XNA 3.1 Redistrubutable — необходимый конечному пользователю, тут.

Источник

Знакомство с XNA и написание первой музыкальной игры

Привет всем начинающим геймдевелоперам и просто хорошим людям. Сегодня, я хочу познакомить вас с замечательным фреймворком XNA (набор инструментов с управляемой средой времени выполнения dotNet). Программировать мы будем на C#.
Для того, чтобы познакомить вас с XNA ближе, я предлагаю написать простую «музыкальную» 2D игрушку. Остальное под катом.

Краткое описание на википедии

Microsoft XNA (англ. XNA’s Not Acronymed) — набор инструментов с управляемой средой времени выполнения (.NET), созданный Microsoft, облегчающий разработку и управление компьютерными играми. XNA стремится освободить разработку игр от написания «повторяющегося шаблонного кода»

Что для этого нам будет нужно?
Что предполагается разобрать и сделать на этом уроке?
Какую игру мы будем реализовывать?

Механика игры проста до безумия. Смысл будет построен на музыке, в случае с этой игрой, будет использована композиция Исаака Шепарда — Leaves in the Wind. Нужно будет ловить мышкой «ноты», скорость и кол-во которых будут зависимы от текущей позиции в музыки, грубо говоря игровой «визуализатор». Для разнообразия существуют 5 тип нот: обычные, красные (враги), пурпурные (мощь), мигающие (превращает все в желтые), желтые (увеличивает скорость набора очков и размеры).

Собираем вещи пустой проект

Проект music_catch — «логика» нашего приложения.
Game1.cs — главный класс приложения, унаследован он от Microsoft.Xna.Framework.Game
Program.cs — «точка входа» в приложение, он нам не интересен.
Проект music_catchContent — «контент» нашего приложения, туда мы будем складывать ресурсы.

Более подробно взглянем на Game1.cs
В нем можно выделить основные функции, такие как:
Game1() — конструктор класса.
Initialize() — инициализация приложения.
LoadContent() — загрузка контента.
UnloadContent() — выгрузка контента.
Update(GameTime gameTime) — обновление логики приложения (например физики, etc)
Draw(GameTime gameTime) — отрисовка игры. ВНИМАНИЕ, любые операции с рисованием нужно проводить тут и только тут.

Пустой проект собран, идем дальше, добавляем ресурсы в приложение, все нужные ресурсы «кидаем» в папку music_catch\music_catchContent. В нашем случае — пять PNG файлов и одно музыкальное сопровождение. Добавляем это все в проект:

Там же создаем шрифт, в теле SpriteFont1.spritefont указываем имя и размер:

Читайте также:  что делать если ребенок специально доводит родителей

Создаем переменные для будущего контента:

И грузим его в LoadContent():

Кстати, подгружается контент следующим образом: вызывается Content.Load<>(«asset»);
В треугольных скобках указывается процессор контента, в нашем случае это Texture2D, Song, SpriteFont. Можно использовать свои процессоры, об этом я расскажу как-нибудь потом.

Контент подгружен, идем в конструктор Game1() и пишем:

Пишем «игровую логику»

Теперь нам нужно создать контроллер системы частиц и сами частицы (ноты), которые мы будем виртуозно ловить мышкой.
Создаем два класса: Catcher (сами частицы) и CatcherHolder (система частиц).

Листинг Catcher с комментариями:

Листинг CatcherHolder с комментариями:

Объясню, что за загадочный аккумулятор и зачем он нужен. Поговорим о «музыкальном» спектре.

Музыкальный сигнал – пища для аудиосистемы. Точнее – не так. Динамики музыку не слушают, ее восстанавливает наш мозг, получая сложный сигнал, содержащий множество частотных составляющих.
Дак вот, идея такая, слушать «частоты» каждый Update и записывать их в какой-нибудь, например, VisualizationData. Проще говоря, в массив из 128 элементов, которые изменяются от 0f до 1f.

Как этим можно воспользоваться?
Каждый Update: значения в массиве меняются в соответствии с музыкой, нам нужно проверить все 128 элементов, если значение элемента больше чем 0.6f, вызываем Beat-функцию и передаем ей Wave (индекс элемента массива, в котором произошло событие). Все бы хорошо, можно в Beat создавать частичку-ноту. Но представим, что у нас выполняется три Update’а подряд, в котором в одном и том же индексе — значение > 0.6f, как итог будет 100500 частичек за секунду. Чтобы таких вещей не происходило, можно использовать аккумулятор. Смысл его прост: при Beat’е у ячейки массива-аккумулятора соотвествующего индексу Wave отнимается константа BEAT_COST. Каждый Update ко всем элементам аккумулятора прибавляется ACCUMULATE_SPEED. Перед тем, как вызвать Beat проверяется выполняется ли условие — значение аккумулятора > ACCOMULATOR_REACTION, если да, то вызываем Beat. Это решает проблему.

Кстати, BEAT_REACTION — значение, после которых нужно проверять, стоит ли вызывать Beat.

Дальше приведу полный листинг GameLogic (Game1). Много кода, но постараюсь расписать в комментариях.

Вот такая простенькая игрушка получается. На конечной машине пользователя должен быть установлен XNA 4.0 и .NET;

Скриншот:

Источник

Microsoft XNA

Ошибка Lua: callParserFunction: function «#property» was not found.

Ошибка Lua: callParserFunction: function «#property» was not found.

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field ‘wikibase’ (a nil value).

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field ‘wikibase’ (a nil value).

Ошибка Lua: callParserFunction: function «#property» was not found.

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field ‘wikibase’ (a nil value).

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field ‘wikibase’ (a nil value).

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field ‘wikibase’ (a nil value).

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field ‘wikibase’ (a nil value).

Ошибка Lua: callParserFunction: function «#property» was not found.

Шаблон:Wikidata/p373

Шаблон:Нет изображения Шаблон:Категория по дате

Содержание

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

Обзор [ ]

XNA Framework [ ]

XNA Content Pipeline [ ]

XNA Content Pipeline — набор интегрированных в Visual Studio инструментов управления конвейером ресурсов игры, помогающий при определении, поддержке, отладке и оптимизации конвейера ресурсов игры. Конвейер ресурсов игры ( Шаблон:Lang-en ) описывает процесс, при котором содержимое игры, такое как текстуры и трёхмерные модели, преобразуется в форму, подходящую для использования игровым движком. 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 Community Games [ ]

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

Альтернативные реализации [ ]

Источник

Что такое xna framework

Начавшаяся несколько лет назад в Microsoft разработка XNA держалась в глубоком секрете. На GDC (самой большой ежегодной конференции разработчиков игр) в 2004 году Microsoft впервые анонсировала XNA. XNA это не просто набор библиотек, подобно DirectX; она также, для облегчения жизни разработчиков, включает набор утилит и даже собственную интегрированную среду разработки (IDE), унаследованную от Visual Studio. До 2006 года не было выпущено никаких утилит или кода, и разработчики, использующие DirectX, с 2004 по 2006 год только видели логотип XNA в верхнем правом углу документации DirectX SDK (рис. 1.1). (XNA просто означает «XNA не акроним».)

Это значит, что Microsoft долгое время работала над XNA Framework, но разработчики не знали чего ожидать. Это мог быть преемник DirectX Framework, но когда в конце 2005 года была выпущена бета-версия Direct3D 10 для Windows Vista, оказалось, что DirectX все еще остается основной графической библиотекой даже в этой новой операционной системе. В начале 2006 года на GDC Microsoft представила XNA Build March 2006 CTP. XNA Build — это утилита, позволяющая управлять сложным процессом построения приложений, аналогичная Msbuild и таким инструментам, как Ants, но более мощная и сложная. Microsoft выпустила игру MechCommander 2 с открытым кодом (Shared Source) и много людей загрузили ее и пытались самостоятельно построить. В результате стало ясно, что разработчики, особенно небольшие и средние компании, не нуждаются в столь сложном инструменте для управления построением приложений.

После этого наступило затишье, и только персонал Microsoft и DirectX MVP (к счастью, я один из них) знали о грядущем пришествии XNA Framework и XNA Game Studio. Остальной мир узнал об этом на августовской конференции Gamefest (новая конференция разработчиков игр, организованная Microsoft), где Microsoft 30 августа 2006 года анонсировала первую бета-версию XNA Game Studio Express. Первая бета-версия содержала только один пример для разработчиков, Space Wars, и, кроме того, в XNA было достаточно мало функциональности для трехмерных игр. Множество разработчиков и любителей попробовали XNA и написали массу небольших двухмерных игр с помощью класса Sprite из XNA. Хотя вы и могли быстро создать собственный клон Pong или простенькую игру в стиле «убей их всех», написание собственной процедуры импорта трехмерных моделей или визуализатора оставалось сложной задачей.

Первоначально XNA Game Studio Express была предназначена для начинающих, любителей и студентов, чтобы позволить им быстро создавать собственные игры для Windows и Xbox 360. Это не значит, что профессиональные разработчики не могут использовать XNA. В 2007 году Microsoft собирается выпустить специальную версию XNA Game Studio Professional, предназначенную для профессиональных игровых студий, но если вы хотите выполнять разработку в Visual Studio 2005 Professional, воспользуйтесь приведенными в этой главе советами о совместной работе VS и XNA.

Несколько месяцев спустя, в ноябре 2006 года, Microsoft выпустила другую бета-версию, а в декабре 2006 увидел свет окончательный вариант XNA Game Studio Express, включающий конвейер содержимого и множество новых возможностей, о которых вы узнаете в главах 2 и 3.

XNA является полностью бесплатной и позволяет разработчикам одновременно создавать игры для Windows и для Xbox 360. Но если вы хотите запускать ваши XNA игры на приставке Xbox 360, вам надо будет присоединиться к клубу разработчиков Creators Club с ежегодным взносом 99 долларов.

XNA Game Studio Express

На рис. 1.2 показана XNA Game Studio Express. Чуть позже вы узнаете как установить ее.

Окно не просто выглядит похожим на Visual C# 2005 Express — это оно и есть. Отличия заключаются в небольших изменениях параметров проекта, если вы создаете XNA-приложение. Кроме того, появились дополнительные команды в меню Tools | Options, позволяющие выбрать устройство Xbox 360 и ввести ключ шифрования. Есть еще несколько нововведений в среде разработки, например, конвейер содержимого, позволяющий вам быстро импортировать в ваш проект текстуры, модели и шейдеры. Все это мы подробнее обсудим чуть позже.

Microsoft также упоминала еще одну версию среды разработки для XNA, называемую просто XNA Studio, базирующуюся на Visual Studio Team System и предназначенную для больших студий. Узнать больше об XNA Framework вы можете по адресу http://msdn.microsoft.com/directx/xna/faq.

Модель приложения

XNA Framework делится на три основные части (рис. 1.3):



Все эти библиотеки написаны на C# и являются полностью управляемыми. Это значит, что вы можете открыть их, например, с помощью утилиты Reflector (возьмите ее по адресу http://www.aisto.com/roeder/dotnet/) и посмотреть, как они работают (рис. 1.4). Большая часть функциональности просто вызывает библиотеки DirectX, слегка упрощая работу с ними. Конвейер содержимого мы обсудим чуть позже.

Взгляните на модель приложения. Каждый проект XNA использует класс Game, в котором содержатся все важные компоненты игры, графическое устройство, параметры окна и диспетчер содержимого. Вы можете добавить сюда обработку ввода и работу со звуком. Фактически, все, что ваша игра делает на самом высоком уровне, коренится в классе игры, или, по крайней мере, находится в каком-нибудь компоненте, к которому можно получить доступ из этого класса.

Возможно, вы уже сообразили, что делают эти методы. Initialize загружает все содержимое игры, устанавливает начальные параметры и инициализирует все, что необходимо. Если вы хотите следовать шаблону проектирования, предложенному для XNA Microsoft, разместите все операции загрузки в методе LoadGraphicsContent. Update вызывается перед рисованием каждого кадра для обновления игрового времени, ввода, работы со звуком, и всего того, что не видно на экране. Если ваша игра сильно нагружает видеокарту, то вполне возможно, что Update будет вызываться гораздо чаще, чем Draw, так что учтите, что код обновления должен быть независимым от кода рисования. Ни в одном из примеров этой книги не надо беспокоиться о том, сколько раз вызывается Update и сколько раз Draw. И, наконец, Draw вызывается в каждом кадре для рисования всего, что выводится на экран. Разделение между Update и Draw не является принципиальным, и почти всегда может игнорироваться при тестировании модулей, но в окончательной версии игры важно гарантировать, что игровая логика работает независимо от кода рисования. Например, в Windows пользователь может нажать комбинацию клавиш Alt и Tab или свернуть окно, и в этом случае вызывать Draw вообще не надо, но возможно, вы захотите, чтобы игра продолжала работать в фоновом режиме. Это особенно важно для сетевых игр, чтобы гарантировать сохранение синхронизации игроков.

Помимо этого, вы можете добавлять к вашему классу игры классы GameComponent, в которых тоже есть методы Update и Draw. Эти методы автоматически вызываются из методов Update и Draw вашей игры. Инициализация может выполняться непосредственно в конструкторе. Первоначально Microsoft предполагала, что разработчики будут создавать и добавлять игровые компоненты с помощью средств проектирования Visual Studio, которые были в первой бета-версии XNA Game Studio Express (от 30 августа 2006 года). Позднее возможность проектирования была удалена, поскольку она работала не слишком хорошо, не поддерживала платформу Xbox 360, и ей пользовалось мало разработчиков.

Идея игровых компонентов заключается в повторном использовании частей кода с возможностью простой их вставки в ваши игры. Это может быть, например, счетчик частоты кадров или визуализатор небесного куба с наложением текстур для трехмерного фона. Мне кажется, здесь два основных недостатка: нет стандартных компонентов, поставляемых с XNA и не слишком трудно закодировать такую модель приложения и даже расширить ее. В этой книге я редко использую классы GameComponent, но вам ничто не мешает добавить свои собственные. В главе 4 класс GameComponent обсуждается более подробно, и вы узнаете о его преимуществах и недостатках. Поскольку у класса игры есть свойство Components, добавлять компоненты очень просто.

Не поймите меня неправильно, основная идея игровых компонентов действительно хороша; когда вышла первая бета-версия XNA, была доступна небольшая презентация Митча Уолкера (Mitch Walker), руководителя проекта XNA Framework в Microsoft, об игровых компонентах и том, как их комбинировать. Сперва я был не слишком уверен, что думать о конвейере содержимого и идее игровых компонентов; в презентации они выглядели замечательно, но, начав программировать мои первые игровые проекты с XNA, я обнаружил, что работать с инструментами проектирования, имеющимися в первой бета-версии не слишком удобно. Во второй бета-версии и в конечной версии большинство исходного кода игровых компонентов было удалено, также как и компонент графического проектирования в XNA Game Studio. Это случилось потому что Microsoft не смогла найти приемлемый способ реализации проектировщика и идеи игровых компонентов для приставки Xbox 360 (прежде они работали только на платформе Windows). Это подтвердило мое первое ощущение, что идея игровых компонентов не слишком полезна, и даже может ограничить вас в некоторых отношениях, таких, как необходимость самому беспокоиться о рисовании (более подробно это обсуждается в главе 4).

Действительно, реализация в каждой игре собственного пользовательского интерфейса и логики меню вызывает трудности. Но подумайте о том, что стандартная система меню, подобная используемой в Windows, в каждом приложении очень скучна, а изучение новых способов создания меню в каждой игре приводит к накоплению полезного опыта. Если вы хотите создать новую игру, совсем несложно будет извлечь код и создать собственный игровой компонент, который можно повторно использовать (например, класс SkyCubeMapping). Хорошими примерами игровых компонентов, которые можно использовать во многих играх, являются показанные в главе 4 классы камеры и захвата кадров, но почти все остальное в играх из этой книги реализуется без использования игровых компонентов.

Одна из надежд, которые Microsoft возлагает на эту модель приложения, заключается в том, что сообщество разработчиков игр будет создавать и распространять игровые компоненты, что упростит создание игр и повысит привлекательность XNA. За дополнительной информацией можете обратиться к проекту eXperience, находящемуся по адресу www.codeplex.com.

Конвейер содержимого

Конвейер содержимого (content pipeline) используется для импорта, сборки и загрузки игровых составляющих, таких как текстуры, трехмерные модели, шейдеры и звуковые файлы, в вашем игровом проекте (рис. 1.6). Это значительно сокращает объем кода, необходимого для получения в вашей игре графики, трехмерных данных и шейдеров. Например, если вы поместите в свой проект файл модели, которая использует две текстуры и определенный шейдер, конвейер содержимого обработает файл модели и автоматически найдет и добавит необходимые текстуры и шейдеры. Вам не надо делать это самостоятельно; импортер содержимого «скомпилирует» данные в двоичный формах и в ходе этого процесса соберет все, что вам необходимо.

Предположим, что шейдер, добавляемый к вашему проекту через модель, содержит ошибку. Раньше вы бы запустили игровой проект, а затем получили исключение, сообщающее, что шейдер не компилируется и игра не может работать. Теперь шейдеры компилируются в процессе построения и вам не надо запускать игру, чтобы увидеть, что она не работает. Вы можете быстро исправить ошибку, воспользовавшись номером строки и сообщением об ошибке, выводимым XNA Game Studio Express в окне с отчетом о компиляции, а затем заново собрать приложение.

Конвейер содержимого не является одной библиотекой, он состоит из пяти различных DLL:

Microsoft.Xna.Framework.Content.Pipeline.dll содержит базовые функции для конвейера содержимого.

Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll используется для компиляции и импорта шейдеров.

Ладно, это все основы, которые нужны вам сейчас. Пришло время двинуться дальше и начать программировать вашу первую игру.

Источник

Читайте также:  что значит прищипывать авокадо
Строительный портал