Microsoft xna

Статьи

XNA Content Pipeline: Обзор

Большинство начинающих разработчиков-программистов (классический вариант),  поначалу, основное внимание концентрируют на коде, алгоритмах, технологиях, пытаясь создать свои движки и библиотеки. А их «игры» — в основном, только код

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

Читать | Комментарии []17 янв. 2011

Захват Скриншота средствами XNA
В этом уроке я покажу вам, как захватить скриншот в XNA 2.0. Тема эта короткая и сравнительно простая, так что давайте уже нырнём в неё с головой!

Читать26 авг. 2009

Рисование простого SkyBox-а.XNA – Быстрый стартВиртуализация графического устройства в XNA 2.0XNA FAQ

Почему XNA?

XNA хороший выбор для вас:

  • если вы хотите создавать игры используя языки платформы .Net, а тем более используя C#;
  • если требуется высокая скорость и эффективность разработки (в противовес С++, который  может обеспечить большую производительность и мобильность, но требует больших  «затрат» при разработке);
  • если вы хотите попробовать свои силы на XBOX.

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

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

После установки в обоих студиях появляются проекты нового типа:

Распространенные сообщения об ошибках в Microsoft.Xna.Framework.dll

Наиболее распространенные ошибки Microsoft.Xna.Framework.dll, которые могут возникнуть на компьютере под управлением Windows, перечислены ниже:

  • «Microsoft.Xna.Framework.dll не найден.»
  • «Файл Microsoft.Xna.Framework.dll отсутствует.»
  • «Microsoft.Xna.Framework.dll нарушение прав доступа.»
  • «Файл Microsoft.Xna.Framework.dll не удалось зарегистрировать.»
  • «Файл C:\Windows\System32\\Microsoft.Xna.Framework.dll не найден.»
  • «Не удалось запустить MSDN Disc 5095. Отсутствует необходимый компонент: Microsoft.Xna.Framework.dll. Пожалуйста, установите MSDN Disc 5095 заново.»
  • «Не удалось запустить данное приложение, так как не найден файл Microsoft.Xna.Framework.dll. Повторная установка приложения может решить эту проблему.»

Такие сообщения об ошибках DLL могут появляться в процессе установки программы, когда запущена программа, связанная с Microsoft.Xna.Framework.dll (например, MSDN Disc 5095), при запуске или завершении работы Windows, или даже при установке операционной системы Windows

Отслеживание момента появления ошибки Microsoft.Xna.Framework.dll является важной информацией при устранении проблемы

Причины ошибок в файле Microsoft.Xna.Framework.dll

Большинство ошибок Microsoft.Xna.Framework.dll связано с отсутствием или повреждениями файлов Microsoft.Xna.Framework.dll. Тот факт, что Microsoft.Xna.Framework.dll – внешний файл, открывает возможность для всяческих нежелательных последствий.

Непредвиденные завершения работы вашего компьютера или заражение вирусом может повредить Microsoft.Xna.Framework.dll, что приведет к ошибкам dll. Когда файл Microsoft.Xna.Framework.dll повреждается, он не может быть нормально загружен и выведет сообщение об ошибке.

В других случаях ошибки файла Microsoft.Xna.Framework.dll могут быть связаны с проблемами в реестре Windows. Нерабочие ссылки DLL файлов могут помешать зарегистрировать файл dll должным образом и вызвать ошибку Microsoft.Xna.Framework.dll. Эти нерабочие ключи реестра могут появиться в результате отсутствия файла DLL, перемещения файла DLL или ввиду наличия остаточной ссылки DLL файла в реестре Windows после неудачной установки или удаления программы.

Более конкретно, данные ошибки Microsoft.Xna.Framework.dll могут быть вызваны следующими причинами:

  • Ошибочные или поврежденные записи реестра для Microsoft.Xna.Framework.dll
  • Вирус или вредоносное ПО, повредившее файл Microsoft.Xna.Framework.dll.
  • Отказ оборудования Microsoft, например, некачественный жесткий диск, вызвавший повреждение файла Microsoft.Xna.Framework.dll.
  • Другая программа изменила требуемую версию Microsoft.Xna.Framework.dll.
  • Другая программа злонамеренно или по ошибке удалила файл Microsoft.Xna.Framework.dll.
  • Другая программа удалила файл Microsoft.Xna.Framework.dll.

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

Пакет Microsoft XNA, по словам представителей Microsoft, позволит разработчикам игр избежать многих технических трудностей, возникающих при написании кода, а также обеспечит существенное снижение стоимости конечной продукции. Кроме того, благодаря XNA программисты смогут создавать принципиально новые игры с высококачественной графикой. В ходе демонстрации, Microsoft показала два анимационных ролика, созданных с применением технологии XNA. В одном из них облако вздымающегося сигаретного дыма в режиме реального времени меняло свою форму и направление движения под действием внешних факторов. Другой ролик демонстрировал разлетающиеся в разные стороны детали разбившегося о стену автомобиля.

Инструментарий XNA изначально разрабатывался с целью максимально облегчить процесс разработки игр для консоли Xbox и компьютеров, работающих под управлением операционной системы Windows. Вместе с тем, пакет XNA позволит распространить общие сервисы Xbox Live, такие как, например, аутентификация, на игры для персональных компьютеров.

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

Был создан проект под названием Mono.XNA для переноса XNA на кроссплатформенную платформу Mono с открытым исходным кодом.

На основе кодовой базы Mono.XNA и SilverSprite был сформирован новый проект под названием MonoGame для переноса XNA на несколько мобильных устройств. Начиная с версии 3.0.1 (выпущенной 3 марта 2013 г.), поддержка стабильна для iOS , Android, включая OUYA , macOS , Linux и Metro для Windows 8 , Windows RT и Windows Phone 8 , а также PlayStation Mobile в 2D. PlayStation Mobile 3D и Raspberry Pi в настоящее время разрабатываются.

Проект с открытым исходным кодом под названием Grommet содержит ограниченный порт для встроенных устройств, использующих .NET Micro Framework .

Доступен проект под названием ANX, который реализует свою собственную версию XNA с использованием стека SharpDX , также в процессе поддержки Linux , macOS и PlayStation Vita . Используя ANX, разработчики могут писать игры, используя код, очень похожий на XNA, но все еще считающийся приложением Metro в Windows 8.

Инди-игры для Xbox Live

Игры для Xbox 360, написанные в XNA Game Studio, можно было отправлять в App Hub, для чего требовалось премиум-членство (около 99 долларов США в год). Все игры, представленные в App Hub, были подвергнуты экспертной оценке другими создателями. Если игра прошла проверку, она будет размещена на Xbox Live Marketplace . Создатели могли установить цену в 80, 240 или 400 очков за свою игру. Создателю платят 70% от общей выручки от продажи игр в качестве базового уровня. Изначально Microsoft планировала получить дополнительный процент от дохода, если они предоставят дополнительный маркетинг для игры, но эта политика была отменена в марте 2009 года, оставив неизменной фиксированную ставку независимо от продвижения.

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

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

При каждом проходе метода Draw:

  • начинаем работу при помощи SpriteBatch.Begin().
  • далее нужное вам количество раз вызываем SpriteBatch.Draw() для того, чтобы нарисовать каждый спрайт.
  • и в конце при помощи SpriteBatch.End() – завершаем процесс.

В качестве параметров SpriteBatch.Draw() может принимать позицию на экране, где будет выведена текстура, поворот, наклон, масштаб. Также класс SpriteBatch поддерживает автоматическую сортировку по Z координате. Сама текстура передаётся в метод SpriteBatch.Draw() в виде референса на класс Texture2D которые вы предварительно должны были получить, в результате загрузки контента.

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);

    spriteBatch.Begin();

    spriteBatch.Draw(myCoolPlayerSprite, new Vector2(10f, 10f), Color.White);

    spriteBatch.End();

    base.Draw(gameTime);
}

SpriteBatch также содержит метод DrawString(), который аналогичен методу Draw(), за исключением того, что вместо текстуры он принимает как параметр растровый шрифт (объект класса SpriteFont), а также строчку текста, которую необходимо вывести.

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

Разработчики XNA решили избавиться от фиксированного графического конвейера, который широко использовался в MDX и MDX2. В XNA используется программируемый графический конвейер, то есть в основе процесса рендеринга — шейдер (по правде говоря, и в середине SpriteBatch лежит надстройка над конвейером и свой специальный шейдер). Как результат, если вы знакомы с данным подходом, работа с 3Д в XNA для вас не будет сложна.

Итак, за рендеринг у нас должен отвечать шейдер. К счастью в XNA уже реализован простой шейдер BasicEffect  (практически обеспечивает тот минимум, что был доступен с фиксированным конвейером).

Предварительно добавив модель в контент, и загрузив её, вы уже должны иметь объект класса Model. Такая модель в свою очередь содержит набор мешей (класс ModelMesh).

Всё, что нам нужно сделать, это перебрать все объекты класса ModelMesh в нашей модели, назначить (обычно он уже назначен) в качестве шейдера — BasicEffect. Далее, передать в шейдер необходимые параметры (в обязательном порядке — матрицы View, Projection и World). И в конце вызвать у каждого ModelMesh’а метод Draw.

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);

    foreach (ModelMesh mesh in myCoolModel.Meshes)
    {
        foreach (BasicEffect effect in mesh.Effects)
        {
            effect.View = ViewMatrix;
            effect.Projection = ProjectionMatrix;
            effect.World = WorldMatrix;
        }
        mesh.Draw();
    }
    
    base.Draw(gameTime);
}

Управление

Тут всё предельно просто. Набор классов со статическими методами, и несколько перечислений. А именно — классы Keyboard, Mouse, GamePad, каждый их них отвечает за своё устройство. У каждого из них есть метод GetState(), который возвращает соответственно KeyboardState, MouseState, GamePadState, содержащие информацию о состоянии устройств ( к примеру позиция Х, Y курсора мыши, или состояние кнопки клавиатуры в текущий момент).

protected override void Update(GameTime gameTime)
{

    if (Keyboard.GetState().IsKeyDown(Keys.Escape))
        this.Exit();

    if (Keyboard.GetState().IsKeyDown(Keys.Up))
        PlayerPosition.Y -= 10f;
    if (Keyboard.GetState().IsKeyDown(Keys.Down))
        PlayerPosition.Y += 10f;
    if (Keyboard.GetState().IsKeyDown(Keys.Left))
        PlayerPosition.X -= 10f;
    if (Keyboard.GetState().IsKeyDown(Keys.Down))
        PlayerPosition.X += 10f;

    base.Update(gameTime);
}

Всё, что вам нужно — в Update проверять состояние устройства, и соотвественно работать с игровой моделью.

Аудио

Тут у нас хитрая история. Изначально звук в XNA (1.0-2.0) был возможен только при помощи XACT проектов.

Они создавались в отдельном редакторе, идущем вместе с XNA Game Studio. Такой проект содержал набор аудио файлов(точнее относительных ссылок на них, на диске), набор поименованных сущностей – звуков, каждый соответствовал тому или иному аудио файлу, а то и нескольким (случайный выбор конечного звука по таблице с вероятностями). Привязка звуков к группам (например, «Музыка» и «Эффекты», с отдельной регулировкой громкости на каждую). Ну, и так далее.

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий