Знакомство с 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;
Скриншот:
Майкрософт хна фреймворк что это за программа
Что же всё-таки представляет собой 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 Framework
Программа используется в качестве вспомогательного инструмента при разработке игр. Есть возможность создавать спецэффекты, например, дым, туман и другие.
XNA Framework – приложение для Windows, представляющее собой набор библиотек и классов. Утилита используется для разработки видеоигр. Главной целью программы является создание эффектов и сложных структур. Кроме того, с помощью данного компонента можно обеспечить совместимость исполняемых файлов со старыми версиями операционной системы.
Установка
Приложение не имеет графического интерфейса. Для установки необходимо запустить исполняемый файл от имени администратора и следовать инструкции на экране. После инсталляции будет доступна возможность использовать набор библиотек и классов при создании программ. Для написания кода следует дополнительно установить Visual Studio или другую среду разработки.
Компоненты
В состав утилиты входят инструменты, отвечающие за визуализацию и спецэффекты. Есть возможность проектировать дым, туман, огонь и другие явления. Также фреймворк позволяет разрабатывать сложные сцены и работать со структурами частиц. Еще одной функцией приложения является обеспечение совместимости старых игр с новыми версиями операционной системы и поддержки контроллеров.
Стоит отметить, что в настоящее время утилита не поддерживается разработчиком. Это связано с тем, что комплект библиотек не применяется для создания современных игр по причине появления новых технологий и движков.
XNA Framework
Описание
Этот компонент закачивает в OS Windows библиотеки XNA, которые позволяют создателям работать с приложениями для OS Windows. Графическая оболочка этой среды разработки рассчитана на продвинутого пользователя, который создаёт проекты и игры, которые относятся к старому поколению.
Корректная работа этих игр обеспечивается после установкой библиотек на компьютере пользователя.
Проще говоря, если не установить этот пакет программных инструментов вы не сможете играть в некоторые игры. В частности вы не запустите проекты, которые были созданы в промежутке между 2008 и 2012 годами.
В 2013 Microsoft перестали выпускать пакеты XNA Framework. Для игр нового поколения используются движки типа Unreal Engine 4, Unity 3D и CryEngine 4, которые запускают проекты, используя другие технологии.
Назначение
Сначала XNA Framework был издан для упрощённого ввода кода. Создатели думали, что «фреймворк» сделает боле простое «портирование» проектов с консолей на компьютер.
Такой подход позволил снизить стоимость разработки проектов. Ещё фреймворк без проблем позволял добавлять в игры дополнительные технологии, которые отвечают за визуализацию.
Используя XNA, разработчики проектировали красивый дым и другие эффекты, которые используют сложную структуру частиц. Кроме боле простого создания самих игр, этот набор инструментов осуществлял интеграцию в Xbox Live.
Майкрософт хна фреймворк что это за программа
XNA currently encompasses Microsoft’s entire Game Development Sections, including the standard Xbox Development Kit and XNA Game Studio.
Contents
Overview
XNA Framework
XNA Build
XNA Build is a set of game asset pipeline management tools, which help by defining, maintaining, debugging, and optimizing the game asset pipeline of individual game development efforts. A game asset pipeline describes the process by which game content, such as textures and 3D models, are modified to a form suitable for use by the gaming engine. XNA Build helps identify the pipeline dependencies, and also provides API access to enable further processing of the dependency data. The dependency data can be analyzed to help reduce the size of a game by finding content that is not actually used. For example, XNA Build analysis revealed that 40% of the textures that shipped with MechCommander 2 were unused and could have been omitted. [4]
XNA Game Studio
XNA Game Studio is an integrated development environment (IDE) for development of games. [5] Five revisions have been released so far.
XNA Game Studio Express
The first beta version of XNA Game Studio Express was released for download on August 30, 2006, followed by a second version on November 1, 2006. Microsoft released the final version on December 11, 2006. [7]
On April 24, 2007, Microsoft released an update called XNA Game Studio Express 1.0 Refresh. [8]
XNA Game Studio 2.0
XNA Game Studio 2.0 was released on December 13, 2007. [9] XNA Game Studio 2.0 [10] features the ability to be used with all versions of Visual Studio 2005 (including the free Visual C# 2005 Express Edition), a networking API using Xbox Live on both Windows and Xbox 360 and better device handling. [11] It is also available to download free on the XNA Creators Club website.
XNA Game Studio 3.0
XNA Game Studio 3.0 (for Visual Studio 2008 or the free Visual C# 2008 Express Edition) allows production of games targeting the Zune platform and adds Xbox Live community support. A beta of the toolset was released in September 2008. [12] The final release was released on 30 October 2008. XNA Game Studio 3.0 now supports C# 3.0, LINQ and most versions of Visual Studio 2008. There are several more new features of XNA Game Studio 3.0 also, such as a trial Mode added to XNA Game Studio 3.0 that will enable creators to easily add the required trial feature to their games, Xbox LIVE multi-player features like in-game invites, create cross-platform games that work on Windows, Xbox 360 and Zune.
XNA Game Studio 3.1
XNA Game Studio 3.1 was released on June 11, 2009. The API includes support for video playback, a revised audio API, Xbox LIVE Party system and support for games to use the Xbox 360 Avatars. [13] This version of the software is available for students to download as part of Microsoft’s DreamSpark program which adds a 12-month trial subscription to the XNA Creators Club.
XNA Game Studio 4
XNA Game Studio 4 was announced and released as a ‘Community Technical Preview’ at GDC on March 9, 2010. It adds support for the Windows Phone 7 platform (including 3D hardware acceleration), Configurable Effects, Built-in State Objects, Graphics Device Scalars and Orientation, Cross-platform and Multitouch Input, and Visual Studio 2010 integration. It is currently available as a Beta and is due for final release in 2010.
XNA Framework Content Pipeline
The XNA Framework Content Pipeline is a set of tools that allows Visual Studio and XNA Studio to act «as the key design point around organizing and consuming 3D content». [5]
XDK Extensions
License Agreement
The Microsoft XNA Framework 2.0 EULA specifically prohibits the distribution of commercial networked games that connect to Xbox Live and/or Games for Windows Live in the absence of a specific agreement signed by both the developer and Microsoft. [15] This means that XNA Game Studio can still be used to develop commercial games and other programs for the Windows platform, although Microsoft’s networking support code for Xbox/Windows Live cannot be used. Self-developed network code can still be used inside the developer’s XNA project.
Games created using XNA Game studio may now be distributed via Xbox Live Community Games. The software may also be used to create commercial games which target Windows.
XNA Indie Games
Xbox 360 games written in XNA Game Studio can be submitted to the Creators Club community, for which premium membership is required, this costs US$49 for 4 months or US$99/year. All games submitted to the community are subjected to peer review by other creators. If the game passes review then it is listed on Xbox Live Marketplace. Creators can set a price of 80, 240 or 400 points for their game. The creator is paid 70% of the total revenue from their game sales as a baseline. Microsoft originally planned to take an additional percentage of revenue if they provided additional marketing for a game, but this policy was rescinded in March 2009, leaving the flat rate intact regardless of promotion. [16]
Alternative implementations
A project called Mono.XNA was formed to port XNA to the open source and cross-platform Mono framework. [17]
