2011-04-23 113 views
0

以下問題。如何動態加載內容?

我有一個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); 

    } 

所以他們內部和靜態的,並且可以調用一次爲一類。但是如果我讀取另一個節點以便「紋理路徑」發生變化怎麼辦?如何重新加載圖像紋理?

回答

1

由於你有這個問題,你的框架可能有一些主要缺陷。無論如何,我可以從這樣一個有限的描述建議的唯一的事情就是使用一個字典作爲靜態變量使用鍵作爲內容名稱。如果密鑰不存在,則加載內容。如果它只是返回值。

-2

我相信答案是懷俄明州。

雖然嚴重,我想你混淆了靜態方法和靜態變量。靜態方法可以多次調用。靜態方法是類級別的,不需要您創建類的實例。

1

你需要做的(對於XNA 4.0)什麼是:

  • 添加Windows遊戲項目,以現有的項目。這將舉行類讀取XML作爲List

  • 確保您有

    使用系統下面的參考; using System.Collections.Generic;使用System.Linq的 ;使用Microsoft.Xna.Framework的 ; using Microsoft.Xna.Framework.Content;

  • 請描述項目(EnemyData)一個命名空間,裏面的是,公共類,用於保存數據(對手)。

  • 添加要從XML作爲公共變量閱讀的項目。這是重要的,他們是公開的,否則將無法正常工作。你會得到一個錯誤,如「第4行的元素,第7個字符無效」。

  • 右鍵單擊該文件夾的內容,並添加一個XML文件,或複製在你的XML文件。

  • 確保XML文件使用<XnaContent>爲根節點。

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

  • 使用您創建的每個項目一個節點<Item>,即使只有一個。就我而言,我需要每個敵人都有一個<Item>

  • 將XML文件的內容輸入到XML內容 - XNA Framework和內容處理器爲無處理所需。

  • 在您的主程序(或遊戲)中,請確保您右鍵單擊主項目並添加對所做課程的引用。

  • 您還必須爲內容項目執行此操作。很重要。主項目和內容項目都必須提供給你的課程。

  • 在主/遊戲Game1中,爲您的課程添加Using語句。

    //我的敵人數據XML類NAMESPACE使用EnemyData

    ;

  • 創建該類的變量,如:

    //敵人數據

    天敵[] 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