Разрабатываем Универсальные приложения (Universal app) на MonoGame. Управление игровым содержимым и Content Project

В прошлый раз мы настроили Visual Studio для работы с MonoGame проектами и даже смогли запустить базовое приложение на двух разных платформах.

Теперь мы научимся управлять игровым содержимым (текстуры, модели и т.д.) таким образом, чтобы игра все равно запускалась на двух платформах.

Сначала добавим в решение Content Project.

Как видите, добавилось сразу два проекта, UniversalContent – это проект заглушка, который нужен лишь для того, чтобы преобразовывать содержимое в xnb формат.

Добавим текстуру в проект:

Теперь нам нужно настроить Content Pipeline под конкретную платформу. Для этого в конфигурации проекта поставим нужную платформу – пока это будет Windows 8.

Обратите внимание на то, что эти настройки нужно сделать для всего решения (то есть выбираем Properties у всего Solution)! Настройка конфигурации для проектов почему-то не работает.

Теперь после сборки проекта в папке bin нашего проекта-заглушки появится файл orange.xnb.

Напомню, что мы настроили наш проект для сборки под Windows 8, однако xnb файл будет прекрасно работать и в Windows Phone приложении. Так что я не буду менять конфигурацию для сборки отдельно под каждую платформу, но предположу, что в реальных проектах стоит все же отдельно настраивать конфигурацию при сборке под каждую из платформ.

Теперь нам нужно добавить наш xnb файл в оба проекта. Можно добавить его в Shared проект, но в реальном проекте игровое содержимое может различаться для разных платформ, так что мы добавим xnb файл с каждый из проектов по отдельности.

Не забываем устанавливать правильные Build Action и Copy to Output Directory.

Можно автоматизировать данный этап при помощи добавления следующих строк в файл проекта (.csproj)

<ItemGroup>

<Content Include=»Content\**\*.*»>

<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

</Content>

</ItemGroup>

Также мы можем настроить автоматическое копирование xnb из Content проекта в наши игровые проекты. Для это добавим в Post-build event command line следующие строки:

xcopy /q /y «$(ProjectDir)$(OutDir)Content» «$(SolutionDir)UniversalGame\UniversalGame.Windows\Content»

xcopy /q /y «$(ProjectDir)$(OutDir)Content» «$(SolutionDir)UniversalGame\UniversalGame.WindowsPhone\Content»

Пути должны соответствовать вашим названием проектов, также не забудьте создать папки Content в обоих проектах.

Теперь при сборке проекта, все xnb файлы автоматически скопируются в папки Content обоих проектов.

Теперь нам осталось нарисовать нашу текстуру на экране (даже на двух экранах).

Для этого, как обычно, перейдем к Game1, добавим переменную:


Texture2D tex;

В Load Content загрузим ее:


protected
override
void LoadContent()

{


// Create a new SpriteBatch, which can be used to draw textures.

spriteBatch = new
SpriteBatch(GraphicsDevice);


// TODO: use this.Content to load your game content here

tex = Content.Load<Texture2D>(«orange»);

}

В Draw нарисуем ее на экране:


protected
override
void Draw(GameTime gameTime)

{

GraphicsDevice.Clear(Color.CornflowerBlue);

spriteBatch.Begin();

spriteBatch.Draw(tex, Vector2.Zero, Color.White)

spriteBatch.End();


base.Draw(gameTime);

}

Запускаем.

Windows:

Windows Phone:

Вот так, относительно просто, мы настроили сборку проекта под две платформы. Однако, уже сейчас видно, что текстура отображается по-разному на разных устройствах и это может стать очень большой проблемой при разработке реального игрового проекта. В следующий раз попробуем избавиться от этой проблемы

Реклама
Запись опубликована в рубрике Компьютерная графика, MonoGame с метками , , , , , . Добавьте в закладки постоянную ссылку.

11 комментариев на «Разрабатываем Универсальные приложения (Universal app) на MonoGame. Управление игровым содержимым и Content Project»

  1. Отличные статьи, очень хочется еще уроков =)

  2. Иван Егорченко:

    Подскажите пожалуйста, а как добавить SpriteFont в проект MonoGame?

    • Возможно в MonoGame 3.3 что-то изменилось (вроде должно было, но я еще не смотрел), но раньше нужно было создавать SpriteFont в отдельном XNA проекте, компилировать в xnb, а потом уже прикреплять его к MonoGame проекту.

      • Иван Егорченко:

        для проекта Monogame под windows 8.1 так и есть,ну а под windows phone 8.1 такая штука не работает(хотя возможно я что то не так делал)

    • Вот только что проверил, SpriteFont работает на Windows Phone. По крайней мере ошибок не выдает и текст выводится на экран.
      А в чем именно ошибка?

  3. Иван Егорченко:

    а вы компилируете xnb файл в проекте XNA под widows phone так?

    • Нет, я использовал именно тот проект, по которому написан пост. Это вроде бы XNA под Windows.

      • Иван Егорченко:

        Ну я компилирую тоже в XNA под windows,значит как то ни так подключаю, а вы подключаете через Content Project?

    • Подключаю как описано в посте. Через XNA Content Project. Потом скомпилированные xnb файлы копируются в нужные папки MonoGame проектов, подключаются. Им ставится тип Content / Copy if newer
      Так какая ошибка?

  4. Иван Егорченко:

    оказалось все настолько банально,что аж стыдно- неправильно выставил Build Action и Copy to Output Directory извините за беспокойство и спасибо за потраченное на меня время, с Праздничком вас!

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s