Reference = add reference, в висуал студия 2010 не могу найти в вкладке Solution Explorer, Microsoft.Xna.Framework. Его нету. |
Введение в XNA Framework
- DirectX Graphics, отвечающий за работу с двухмерной и трехмерной графикой.
- DirectInput, предназначенный для работы с устройствами ввода: мышью, клавиатуры, джойстиками с обратной связью и т.п.
- DirectSound, используемый для работы со звуковым оборудованием: звуковыми картами, в том числе и с поддержкой трeхмерного звука, MIDI -синтезаторами и т.п.
Managed DirectX
После выхода платформы .NET Framework встал вопрос об использовании трехмерной графики в приложениях, написанных на управляемых языках вроде C#. Дело в том, что COM -интерфейсы компонентов DirectX проектировались в расчeте на использование в программах на языке C++, в результате чего они активно используют специфические возможности C++, к примеру, указатели. Поэтому, хотя язык C# и позволяет использовать COM -компоненты, применение интерфейсов DirectX в программах на C# сопряжено с рядом проблем: применение же указателей в C# не приветствуется и является плохим тоном программирования на платформе .NET, указатели могут использоваться только в unsafe-блоках, что затрудняет чтение программы и повышает вероятность ошибок. Вдобавок, COM -компоненты не могут использовать преимущества инфраструктуры .NET такие как автоматическая сборка мусора и обработка ошибок с использованием исключений.
Чтобы облегчить жизнь разработчикам приложений для платформы .NET, Microsoft включила в состав 9-й версии DirectX надстройку над COM -интерфейсами DirectX: Managed DirectX. В октябре 2005 года была анонсирована вторая версия Managed DirectX, которая была фактически переписана с нуля с учeтом новых возможностей платформы .NET 2.0, в частности, Managed DirectX стал активно использовать обобщенные ( Generic ) классы.
Managed DirectX 2.0 является тонкой надстройкой над DirectX, размещенной в сборке Microsoft.DirectX.dll. Сборка Microsoft.DirectX.dll удовлетворяет всем требованиям платформы .NET 2.0 и не привязана к конкретному языку программирования. Соответственно она может с одинаковой легкостью использоваться в любой .NET -совместимом языке программирования вроде Microsoft Visual Basic, Microsoft Visual C#, Microsoft Visual J#, Iron Python и т.п. Как и оригинальный DirectX, Managed DirectX состоит из трeх компонентов: Direct3D Graphics, DirectInput и DirectSound. Каждому компоненту соответствует одно или несколько пространств имeн (таблица 1.2), содержащих классы и структуры данного компонента. При этом хорошо прослеживается соответствие между классами DirectX и соответствующими COM -интерфейсами неуправляемого DirectX К примеру, COM -интерфейсу IDirect3D9 соответствует брат-близнец класс Microsoft.DirectX.Direct3D.Device, интерфейсу IDirect3DTexture9 – класс Microsoft.DirectX.Direct3D.Texture итак далее. Более того, при должной сноровке при изучении Managed DirectX вполне можно пользоваться документацией по C++ и наоборот4Это очень важный нюанс, так как в настоящее время классический DirectX содержит гораздо более подробную документацию .
Однако Beta версия Managed DirectX 2.0 не была доведена до Release, став частью значительно более амбициозного проекта XNA Framework.
XNA Framework
В 2005-м году в продажу поступила игровая приставка Microsoft следующего поколения – XBOX 360. На этот раз Microsoft решила отказаться от использования процессоров привычной архитектуры x86 в пользу процессора PowerPC, не совместимого с x86. Сама архитектура игровой приставки так же значительно отличалась от персонального компьютера, работающего под управлением операционной системы Windows. Таким образом, впервые в истории у Microsoft оказалось две несовместимых игровых платформы: Windows и XBOX 360. Это обстоятельство ощутимо осложнило жизнь разработчикам игр, так как написание приложения с поддержкой обоих платформ фактически сводится к написанию отдельных приложений для каждой платформы, что под силу лишь достаточно крупным конторам.
Подобная изоляция двух платформ не устраивала Microsoft, поэтому возникла необходимость создания инструментария позволяющего небольшим конторам и начинающим разработчикам создавать кроссплатформенные приложения, работающие как на платформе Windows, так и на XBOX 360. В качестве основы было решено использовать платформу .NET: как известно, .NET -приложения компилируются в промежуточный язык IL, а финальная компиляция в машинный код происходит только при запуске приложения на конкретной системе. Таким образом, .NET -приложению, в общем-то, безразлично, какой процессор в данный момент установлен в системе.
Но на практике все оказалось несколько сложнее:
- .NET Framework содержит мощную библиотеку классов на все случаи жизни, включая разработку приложений баз данных, web -сервисов, web -сайтов. Разумеется, данная функциональность является, мягко говоря, несколько избыточной для игровой приставки. Кроме того, ряд классов .NET Framework сильно привязаны к операционной системе Windows (пространства имен System.Windows.Forms, System.Drawings ), а перенос Windows на игровую приставку является весьма сомнительной затеей.
- Managed DirectX, является достаточно тонкой настройкой над DirectX. А так как DirectX – это один из компонентов платформы Windows, Managed DirectX автоматически оказывается непереносимым API, привязанным к платформе Windows. Кроме того, классы и структуры Managed DirectX активно используют функциональность из пространств имен System.Windows.Forms и System.Drawing.
Первая проблема была решена путeм реализации на XBOX лишь подмножества классов .NET Framework, известного как .NET Compact Framework. Для решения второй проблемы был разработан XNA Framework -высокопроизводительный кроссплатформенный API для разработки графический приложений для платформ Windows и XBOX 360.
Условно все компоненты XNA Framework можно разделить на 4 уровня абстракции (рисунок 1.2):
- Platform (Платформа) - самый нижний уровень, содержащий платформо-зависимые API, такие как неуправляемый DirectX. В подавляющем большинстве случаев приложение может ничего не знать о существовании этого уровня, используя компоненты более высоких уровней абстракции. Более того, прямое обращение уровню Platform неминуемо сузит диапазон платформ, поддерживаемых приложением: не исключено, что Microsoft в будущем добавит поддержку XNA Framework и в операционные системы для карманных устройств.
- Core Framework (Основной Каркас) - нижний платформо-независимый уровень XNA, обеспечивающий базовую функциональность. Размещается в сборке Microsoft.Xna.Framework.dll и содержит 5 компонентов: Graphics (работа с графикой), Audio (работа со звуком), Input (работа с устройствами ввода-вывода), Math (математические расчеты), Storage (работа с файловой системой). Классы и структуры каждого компонента сгруппированы в пространства имен (таблица 1.3). На платформе Windows первые три компонента ( Graphics, Audio, Input ) являются надстройками над DirectX, а компонент Storage - надстройкой над классами .NET Framework для работы с файловой системой. Однако следует всегда помнить о том, что на других платформах всe может обстоять совершенно иначе.
- Extended Framework (расширенный каркас) - набор высокоуровневых классов, решающих типовые задачи, встающие перед разработчиком игр: инициализация графического устройства, организация цикла обработки сообщений, экспорт моделей и текстур из графических редакторов. По сути Extended Framework можно считать универсальным игровым движком ( Game Engine ) начального уровня. Размещается в сборке Microsoft.Xna.Framework.Game.dll.
- Game - собственно приложение пользователя, то есть наши с вами программы. К слову, в комплект XNA входит несколько простых игр ( Starter Kits ), которые можно использовать в качестве заготовок для своих приложений.