XNA Framework (Перевод статьи с блога команды XNA)
В августе 2006-го компания Майкрософт анонсировала XNA Game Studio Express – инструмент, который позволит студентам и людям, хобби которых является программирование игр, создавать игры для PC и Xbox 360 с помощью C#. XNA Framework – это набор .NET библиотек, которые разработчики будут использовать для создания своих игр. В предверьи выхода бета версии, я бы хотел рассказать о ключевых особенностях XNA Framework – а именно задачах XNA Framework, что представляет собой XNA Framework и о средствах разработки, которые предоставляет XNA Framework.
Задачи.
При разработке XNA Framework нам необходимо было решить две главные задачи:
Кроссплатформенная разработка игр.
Одной из задач было создание инструмента для создания игр как для PC так и для XBox 360. Например, чтобы была возможность создать игру для PC, а потом легко портировать ее на XBox 360. Нашей задачей являлось предоставление наборов АПИ, которые бы совпадали на 95%. В некоторых случаях нам пришлось сделать отличия в этих АПИ, так как некоторые компоненты актуальны для одной платформы, а для другой они не представляют ничего интересного. Я думаю, что все игры, которые вы сделаете с помощью XNA Framework будут совместимы с обеими платформами.
Упрощение разработки игр.
Создавать игры тяжело. Их тяжело создавать для профессиональных разработчиков, а тем более для студентов и людей, создание игр для которых является их хобби. Необходимо написать много строк кода, перед тем, чтобы нарисовать что-то на экране. Одной из главных задач XNA Framework было сделать это быстрее и легче. Также нашей задачей было сделать так, чтобы вы начали писать свою игру с первых пяти минут, а не занимались инициализацией граф. устройства. Вам не нужно будет заботиться о создании окна. Вам не нужно будет заботиться о обработке сообщений. Вам не нужно будет перечислять графические адаптеры и режимы экрана. Вам не нужно будет создавать устройство Direct3D и описывать поведение программы при увеличении окна или минимизировании игры. XNA Framework берет это все на себя. Первое что вы будете делать - это писать код для своей игры.
Другой проблемой являлся контент игры (текстуры, модели и т.п). В XNA Framework будет существовать так называемый Content Pipeline, с помощью которого использование контента в вашей игре будет максимально простым. Michael Klucher расскажет об этой возможности позже. (От автора перевода: в бета версии 1 не будет Content Pipeline, ее добавят позже, а пока будет возможность использования контента как в MDX). Content Pipeline будет заботиться об импорте, компиляции и загрузки контента.
Также в XNA Framework будут включены наборы начальных инструментов (Starter Kits). Наборы будут представлять собою полнофункциональные версии игры, включая исходники. Они будут представлены в виде шаблонов. Будет возможность создать свою копию игры на основе шаблона и настроить или изменить ее под себя. Каждый набор будет содержать документацию, включая уроки по изменению или добавлению элементов игры.
Уровни.
XNA Framework можно представить в виде небольшого количества уровней составляющих ее.
Платформа.
Платформа это низший уровень, который состоит из низкоуровневых найтивных и управляемых АПИ. Вот некоторые АПИ составляющие платформу:Direct3D 9, XACT, XInput и XContent.
Основной каркас.
Основной каркас – это первый уровень XNA Framework, который обеспечивает базовую функциональность. Он чем-то похож на Managed DirectX. Этот уровень состоит из нескольких компонентов: Graphics, Audio, Input, Math и Storage. Он будет пополняться новыми компонентами по мере расширения XNA Framework.
Расширенный каркас.
Главной задачей расширенного каркаса является облегчение создания игр. На данный момент этот уровень имеет два компонента: Application Model и Content Pipeline. По мере расширения XNA Framework мы будем пополнять этот уровень для того, чтобы вы смогли быстрее и легче создавать качественные игры.
Игры (Games).
Игры – это наивысший уровень. Он состоит из кода игры и контента. Также здесь находятся шаблоны, наборы начальных инструментов и игровые компоненты.
Возможности.
Итак, мы рассмотрели задачи и строение XNA Framework, теперь рассмотрим возможности:
Модель приложения (Application model).
Назначением модели приложения является обеспечение мультиплатформенности, что позволяет вам сосредоточиться на написании вашей игры. Вам не нужно будет заботиться о создании окна, обработке сообщений, создании таймера. Мы все это сделали для вас. Так же мы обеспечили вас GraphicsComponent-ом, с помощью которого вы сможете с легкостью управлять GraphicsDevice-ом, который используется для рендеринга. Для создания игр на XBox 360, вам также не нужно будет создавать окно или обрабатывать его сообщения, потому как модель приложения такая же как и на PC. Также мы предоставляем нашу компонентную модель, которая позволит вам внедрять в вашу игру GameComponents-ы написанные другими людьми. Это позволит вам в короткие сроки создать библиотеку многократно используемых компонентов. Я думаю, что вскоре мы увидим большое количество библиотек, созданных нашим комьюнити и партнерами.
Графика (Graphics).
Наш графический АПИ основан на АПИ Direct3D 9. Он чем-то похожи на набор типов MDX, но прошел некоторую чистку, в результате чего его использование стало намного легче. Наиболее значимое изменение произошло с графическим конвейером: теперь вместо фиксированного конвейера будет использоваться программируемый т.е. с использованием шейдеров. Это было сделано по нескольким причинам. Первая это то, что программируемый конвейер – это будущее реал-таймовой компьютерной графики. Direct3D 10 не поддерживает фиксированный конвейер, так же как и XBox 360. В принципе это было сделано, потому что если сделать игру на PC с фиксированным конвейером, а потом попробовать перенести ее на XBox 360, то получится большое количество ошибок, поэтому было принято решение применить этот конвейер для обеих платформ. Я думаю, что вам будет приятно знать, создавая игру для PC, что вы с легкостью сможете перенести ее на XBox 360. Мы понимаем, что написание шейдеров и эффектов на начальном этапе будет сложным занятием, поэтому мы предоставим вам пособие API Migration Guide: Managed DirectX 1.1 to XNA Framework (Beta 1). Также будут представлены два вида классов для использования эффектов: BasicEffect и Effect. Если вы начинающий программист шейдеров, то вы сможете использовать облегченную версию – BasicEffect, уверенные же пользователи могут использовать всю мощь шейдеров, используя класс Effect.
Аудио (Audio).
Наше Аудио АПИ является надстройкой над XACT – кроссплатформенным АПИ для Windows и XBox 360. Использование этого АПИ чем-то напоминает использование шейдеров. Вначале используется инструмент XACT для создания пакетов звуковых эффектов и конфигурирования их. Затем разработчик сможет загрузить этот пакет и проигрывать звуки по имени, не заботясь об инициализации буферов и т.п. Например, можно создать звук «Взрыв», состоящий из нескольких WAV файлов, запихнуть это все в один пакет и передать разработчику, которому в свою очередь не нужно заботиться о разных частях звукового пакета, он просто указывает, например, что ему нужно проиграть звук «Взрыв» и все.
Устройство ввода (Input).
АПИ устройства ввода является надстройкой над XInput – кроссплатформенной АПИ для Xbox 360. Оно не требует инициализации. Все что вам нужно будет, это вызвать GetState для указанного контроллера. Здесь будут представлены три вида устройств: геймпад для XBox 360, клавиатура для обеих платформ и мышь для PC.
Сохранение данных.
АПИ сохранения данных предоставляет вам возможность считывать и записывать данные игры (например, сохранение игры или сохранение таблицы рекордов и т.п.). На PC это можно сделать легко с помощью System.IO и Environment. На Xbox 360 для этого нужно назначить игровое состояние профайлу и устройству хранения данных, например, жесткому диску, или модулю памяти. С помощью этого АПИ вы сможете делать все это быстро и легко, при этом код будет одинаковым как для PC так и на XBox.
Мат. часть.
В наше математическое АПИ включены все виды данных используемых для программирования игр, а именно: Vector2, Vector3, Vector4, Matrix, Plane и Ray. Также включены следующие ограничивающие объекты: Bounding Box, Bounding Sphere и Bounding Frustum. В них включены методы для определения пересечений и включений. Также нужно принять к сведению, что наша математическая библиотека по умолчанию использует правостороннюю систему координат. Это означает, что, например мы включили только одну матрицу LookAt для правосторонней системы координат, вместо LookAtLH и LookAtRH. Если вас не устраивает правосторонняя система координат, вы можете написать свою библиотеку, которая будет использовать, например, левостороннюю систему координат.
Будущее.
Пару слов о будущем XNA Framework. Как было сказано ранее, будет расширятся уровень основного каркаса, а также уровень расширенного каркаса, чтобы игры можно было делать еще проще и качественнее. Также будет выпущен пакет XNA Game Studio Professional, который позволит создавать коммерческие игры для XBox 360, используя XNA Framework. Одной из задач XNA Framework является упрощение создания игр, позволяя, сосредоточиться на создании игры независимо от платформы. Ниже представлен код рабочего приложения, который иллюстрирует скелет игры сделанной на XNA Framework.