Как загрузить контент динамически? - PullRequest
0 голосов
/ 24 апреля 2011

следующая проблема.

У меня есть XML-файл:

<Question>
  <questionTxt>In welchem US-Bundesstaat befindet sich der "Yellowstone National Park?"</questionTxt>
    <a>"Wyoming"</a>
    <b>"Illinois"</b>
    <c>"Iowa"</c>
    <d>"Mississippi"</d>
    <texturePath>"YellowStone"</texturePath>
  </Question>

В другом классе я читаю все значения для узла, как это.Проблема в том, что все мои методы LoadContent выглядят так:

internal static void LoadContent(ContentManager Content)
    {

        currentTex = Content.Load<Texture2D>("gfxData/" + texturePath);

    }

Так что они являются внутренними и статическими и могут вызываться только один раз для класса.Но что, если я прочитаю другой узел, поэтому «texturePath» изменится.Как перезагрузить текстуру изображения?

Ответы [ 3 ]

1 голос
/ 19 июня 2011

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

1 голос
/ 26 сентября 2013

Что вам нужно сделать (для XNA 4.0):

  • Добавить игровой проект Windows в существующий проект. Это будет содержать класс, который читает XML как список

  • Убедитесь, что у вас есть следующие ссылки

    с использованием системы; using System.Collections.Generic; использование System.Linq; использование Microsoft.Xna.Framework; используя Microsoft.Xna.Framework.Content;

  • Создайте пространство имен, которое описывает проект (EnemyData), и внутри него открытый класс, который содержит данные (ENEMIES).

  • Добавьте элементы, которые вы хотите прочитать из XML, как переменные PUBLIC. Важно, чтобы они были публичными, иначе это не сработает. Вы получите сообщение об ошибке типа «Элемент в строке 4, символ 7 недействителен».

  • Щелкните правой кнопкой мыши на папке содержимого и добавьте файл XML или скопируйте файл XML.

  • Убедитесь, что файл XML использует <XnaContent> в качестве узла ROOT.

  • Убедитесь, что в XML-файле используется <Asset Type="namespace.classname[]">, например <Asset Type="EnemyData.ENEMIES[]">

  • Используйте узел <Item> для каждого создаваемого вами элемента, даже если он только один. В моем случае мне нужно <Item> для каждого врага.

  • Установите для компонента импорта XML-файла значение XML-содержимого - XNA Framework, а для обработчика содержимого - обработка не требуется.

  • В вашей основной программе (или игре) убедитесь, что вы щелкнули правой кнопкой мыши по основному проекту и добавили ссылку на созданный вами класс.

  • Вы также должны сделать это для Content Project. Очень важно. И основной проект, и проект контента должны иметь ссылку на ваш класс.

  • В основной игре Game1 добавьте оператор использования для вашего класса.

    // Мой класс Enemy Data XML NAMESPACE

    с использованием EnemyData;

  • Создайте переменную для класса, например:

    // Вражеские данные

    ENEMIES [] myEnemyData;

  • Загрузка содержимого в процедуре LoadContent:

    // Загрузить таблицу данных Enemy

    myEnemyData = Content.Load ("Враги");

  • Использование данных из файла XML

    evilTexture = Content.Load (myEnemyData [3] .enemyTexture);

    Damage = MyEnemyData [3] .Damage;

Вот и все! Просто нужно убедиться, что тип в узлах XML совпадает с типом в классе, и что это открытые классы. Я не хочу размещать здесь весь код и XML, но здесь есть ссылки на них.

http://www.DCJoys.com/Class1.cs
http://www.DCJoys.com/EnemyData.csproj
http://www.DCJoys.com/Enemies.xml
0 голосов
/ 24 апреля 2011

Я думаю, что ответ - Вайоминг.

Если серьезно, я думаю, что вы путаете статические методы и статические переменные.Статический метод может быть вызван много раз.Статические методы относятся к уровню класса и не требуют создания экземпляра класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...