Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何动态加载内容?_Xml_Dynamic_Xna - Fatal编程技术网

Xml 如何动态加载内容?

Xml 如何动态加载内容?,xml,dynamic,xna,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> &

下面的问题

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

在welchem US Bundesstaat befindet sich的“黄石国家公园?”
“怀俄明州”
“伊利诺伊州”
“爱荷华州”
“密西西比”
“黄石公园”
在另一个类中,我读取这样一个节点的所有值。问题是我所有的LoadContent方法都是这样的:

internal static void LoadContent(ContentManager Content)
    {

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

    }
内部静态无效加载内容(ContentManager内容)
{
currentTex=Content.Load(“gfxData/”+texturePath);
}

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

我相信答案是怀俄明州


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

由于存在此问题,您的框架可能存在一些主要缺陷。无论如何,从这样一个有限的描述中,我唯一能建议的就是使用字典作为静态变量,使用键作为内容名。如果密钥不存在,请加载内容。如果是,则返回值

对于XNA 4.0,您需要做的是:

  • 将Windows游戏项目添加到现有项目中。这将包含一个将XML作为列表读取的类

  • 确保您有以下参考资料

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

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

  • 添加要从XML中读取的项作为公共变量。重要的是他们必须公开,否则就行不通了。您将得到一个错误,如“第4行的元素,字符7无效。”

  • 右键单击内容文件夹,添加一个XML文件,或复制到XML文件上

  • 确保XML文件使用
    作为根节点

  • 确保XML文件使用
    ,例如

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

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

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

  • 您还必须为内容项目执行此操作。非常重要。主项目和内容项目都必须具有对类的引用

  • 在主/游戏Game1中,为类添加Using语句

    //我的敌人数据XML类名称空间

    使用灌肠数据

  • 为类创建变量,例如:

    //敌方数据

    敌人[]myEnemyData

  • 在LoadContent过程中加载内容:

    //加载敌方数据表

    myEnemyData=Content.Load(“敌人”)

  • 使用XML文件中的数据

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

    损伤=髓鞘[3]。损伤

就这样!只需要确保XML节点中的类型与类中的类型匹配,并且它们是公共类。我不想在这里发布所有代码和XML,但这里有它们的链接

http://www.DCJoys.com/Class1.cs
http://www.DCJoys.com/EnemyData.csproj
http://www.DCJoys.com/Enemies.xml