如何动态加载内容?

时间:2011-04-23 21:38:36

标签: xml dynamic xna

以下问题。

我有一个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>

在另一个类中,我读取了像这样的Node的所有值。问题是我的所有LoadContent方法都是这样的:

internal static void LoadContent(ContentManager Content)
    {

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

    }

因此它们是内部的和静态的,并且只能为一个类调用一次。但是,如果我读取另一个节点,那么“texturePath”会发生变化。如何重新加载图像纹理?

3 个答案:

答案 0 :(得分:1)

由于您遇到此问题,您的框架可能存在一些重大缺陷。无论如何,我可以从这种有限的描述中建议的唯一的事情是使用键作为内容名称使用Dictionary作为静态变量。如果密钥不存在则加载内容。如果只是返回值。

答案 1 :(得分:1)

您需要做什么(对于XNA 4.0):

  • 将Windows游戏项目添加到现有项目中。这将包含一个将XML作为List

  • 读取的类
  • 确保您拥有以下参考资料

    使用System; 使用System.Collections.Generic; 使用System.Linq; 使用Microsoft.Xna.Framework; 使用Microsoft.Xna.Framework.Content;

  • 创建一个描述项目的名称空间(EnemyData),并在其中创建一个包含数据的公共类(ENEMIES)。

  • 将要读取的项目作为PUBLIC变量添加到XML中。重要的是,他们是公开的,否则将无法运作。您将收到类似“第4行的元素,第7个字符无效”的错误。

  • 右键单击“内容文件夹”,添加XML文件,或复制XML文件。

  • 确保XML文件使用<XnaContent>作为ROOT节点。

  • 确保XML文件使用<Asset Type="namespace.classname[]">,例如<Asset Type="EnemyData.ENEMIES[]">

  • 对您正在创建的每个项目使用节点<Item>,即使只有一个。在我的情况下,我需要为每个敌人<Item>

  • 将XML文件的内容导入器设置为XML内容 - XNA Framework,并将内容处理器设置为无需处理。

  • 在您的主程序(或游戏)中,确保右键单击主项目并添加对您所创建的课程的引用。

  • 您还必须为内容项目执行此操作。很重要。主项目和内容项目都必须引用您的班级。

  • 在主/游戏Game1中,为您的班级添加一个使用语句。

    //我的敌人数据XML类NAMESPACE

    使用EnemyData;

  • 为类创建变量,例如:

    //敌人数据

    ENEMIES [] myEnemyData;

  • 在LoadContent过程中加载内容:

    //加载敌人数据表

    myEnemyData = Content.Load(“敌人”);

  • 使用XML文件中的数据

    enemyTexture = 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

答案 2 :(得分:-2)

我相信答案是怀俄明州。

说真的,我认为你混淆静态方法和静态变量。静态方法可以多次调用。静态方法是类级别的,不需要您创建类的实例。