VS2012, C#, Monogame — исключение загрузки ресурсов

Я боролся с этой проблемой уже несколько дней, просматривая сеть, но ничего не помогло мне решить ее: я создаю приложение MonoGame на Visual Studio 2012, но при попытке загрузить текстуру я получаю следующую проблему:

Не удалось загрузить ресурс Menu/btnPlay!

Я установил каталог содержимого: Content.RootDirectory = "Активы"; Также в файле btnPlay.png установлены свойства: Действие сборки: Содержимое и Копировать в выходной каталог: Копировать, если новее.

Мой конструктор и функции LoadContent совершенно пусты, но посмотрите сами:

public WizardGame()
{
    Window.Title = "Just another Wizard game";

    _graphics = new GraphicsDeviceManager(this);

    Content.RootDirectory = "Assets";
}

protected override void LoadContent()
{
    // Create a new SpriteBatch, which can be used to draw textures.
    _spriteBatch = new SpriteBatch(GraphicsDevice);

    Texture2D texture = Content.Load<Texture2D>("Menu/btnPlay");

    _graphics.IsFullScreen = true;
    _graphics.ApplyChanges();
}

Буду рад любой помощи! Я совсем запутался в проблеме....


person user2976693    schedule 10.11.2013    source источник


Ответы (1)


В VS2012, 64-разрядной версии Windows 8 и последней версии MonoGame на сегодняшний день (3.0.1):

  • создайте подпапку с именем Активы
  • установите для параметра Копировать в вывод любое значение, кроме Не копировать
  • добавляйте assets в путь к текстуре при ее загрузке

введите здесь описание изображения

namespace GameName2
{
    public class Game1 : Game
    {
        private Texture2D _texture2D;
        private GraphicsDeviceManager graphics;
        private SpriteBatch spriteBatch;

        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
            _texture2D = Content.Load<Texture2D>("assets/snap0009");
        }

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

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

Вот твоя текстура нарисована :D

введите здесь описание изображения

Примечание.

Для удобства я сохранил исходное значение, на которое указывает корневой каталог содержимого: Content.

Однако вы также можете напрямую указать Assets в пути:

Content.RootDirectory = @"Content\Assets";

Затем загрузите текстуру, не добавляя Assets к ее пути:

_texture2D = Content.Load<Texture2D>("snap0009");
person aybe    schedule 10.11.2013
comment
Хороший пост и красивые визуалы. Только мне не хватает того бита, где вы объясняете, что ему нужно установить Content.RootDirectory = Assets; вернуться к содержанию. Визуальные элементы объясняют структуру вашей карты, но, возможно, было бы неплохо написать эту небольшую часть в двух предложениях о карте содержания. - person MrME; 13.11.2013
comment
На самом деле я никогда не говорил указывать корневой каталог :) Почему я думаю, что это лучше? Потому что это настройки из коробки. - person aybe; 13.11.2013
comment
Я знаю, что нет, но вопрос описывает, что он изменил это на «Активы», и это может создать путаницу в некоторых сценариях, поэтому я прокомментировал, чтобы исключить эти сценарии и сделать ваш ответ еще лучше. - person MrME; 14.11.2013