Что такое 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
Но не думайте, что я описал хоть десятую часть всех пространств имён библиотеки или всех её возможностей. В дальнейшем мы будем подробней рассматривать те или иные возможности 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.
Шаблон:Нет изображения Шаблон:Категория по дате
Содержание
Цели и описание проекта [ ]
Обзор [ ]
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. Чуть позже вы узнаете как установить ее.
|













