Программируем на Monogame без XNA. Часть 2. MonoGame Pipeline Tool

Введение

В этот раз мы посмотрим на то, как MonoGame обрабатывает игровое содержимое: текстуры, модели, эффекты, звук и т.д. Какие инструменты позволяют MonoGame избавиться от Content Processor`ов XNA.

Обратим внимание на папку Content в структуре проекта. В ней находится один элемент – Content.mgcb, который при двойном щелчке мышкой откроется в MonoGame Pipeline Tool.

Окно этого нового инструмента разделено на три части:

В левой верхней части отображается дерево элементов контента. Именно сюда мы будем добавлять свои текстуры и модели.

В левой нижней части отображаются свойства текущего элемента.

Правая часть отведена под консоль вывода.

Посмотрим, какие свойства есть у корневого элемента Content

Пожалуй, наиболее интересными для нас пока что будут свойства Platform – платформа для компиляции контента, Profile (знакомые нам по XNA Reach, HiDef).

Как же добавить новое содержимое в наш проект?

Пока я вижу три способа:

  1. Импорт из старого XNA проекта. В меню можно выбрать File->Import и указать нужный .contentproj файл. Это прекрасная возможность, которая позволяет практически безболезненно перенести свои старые XNA проекты на MonoGame.
  2. Добавление .mgcb файла из другого MonoGame проекта. Эта опция будет полезна при переносе проекта на новую платформу.
  3. Последний способ – это собственно добавление существующих файлов контента или создание новых.

Далее воспользуемся третьим способом и добавим в проект текстуру. Но для начала посмотрим, какие типы файлов MonoGame Pipeline Tool позволит нам создать

Выберем Add->New Item. На данный момент нам доступны четыре типа файлов: Effect, SpriteEffect – файлы шейдерных эффектов, SpriteFont – шрифты, Xml Content – обычные XML файлы.

Теперь добавим существующую текстуру при помощи Add->Existing Item. Нас спросят скопировать ли файл в проект или просто добавить ссылку.

Можно увидеть, что все знакомые нам по XNA свойства Content Processor`ов сохранились и в MonoGame. И это хорошо.

Осталось собрать контент через пункт меню Build (F6) и добавить весь необходимый для отображения код в Game1.cs.

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace WinGame1
{
    /// <summary>
    /// This is the main type for your game.
    /// </summary>
    public class Game1 : Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Texture2D teapot;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            base.Initialize();
        }

        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        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
            teapot = Content.Load<Texture2D>("teapot");
        }

        /// <summary>
        /// UnloadContent will be called once per game and is the place to unload
        /// game-specific content.
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
                Exit();

            // TODO: Add your update logic here

            base.Update(gameTime);
        }

        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here
            spriteBatch.Begin();
            spriteBatch.Draw(teapot, Vector2.Zero, Color.White);
            spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}

После этого мы должны увидеть нашу текстуру в левом верхнем углу экрана.

Обратите внимание на то, что новые файлы с контентом не появились в Solution Explorer, их видно только через MonoGame Pipeline Tool.

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

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s