2012-04-05 112 views
0

我在XNA 4.0遊戲中做了內容管道擴展(使用this教程)。在XNA 4.0運行時加載文件

我改變了一些方面,所以它更好地服務於我的需求,但基本的想法仍然適用。現在我想更進一步,讓我的遊戲在運行時更改。我通過內容管道擴展加載的文件非常簡單,它只包含十進制數字,所以我想讓用戶隨意更改該文件並在遊戲運行時重新加載它(不必重新編譯,因爲我必須這麼做遠)。這個文件是關卡編輯器的一個非常簡化的版本,這意味着它包含像行:

1 1,5 1,78 -3,6 

這裏,第一個數字確定將被吸引到場景中的對象,而其他3個數字是座標如該對象將被放置。

那麼,如何更改包含這些數字的文件,以便遊戲加載它並相應地重繪場景?

感謝

回答

1

考慮您已經創建了一個自定義內容管道延伸我想你知道如何在數據使用的StreamReader加載?您可以通過逐行讀取文本文件來清空您的關卡數據並載入新數據?

我之所以提到這一點是因爲據我所知,不可能在運行時通過內容管道加載數據,特別是因爲xna redistribute不包含內容管道。

另一個選擇可能是更改爲使用xml作爲關卡文件,並使用最近發現的XElement,這是我當前的方法。

以下是使用StreamReader從.txt文件加載簡單級別數據的註釋示例。 http://pastebin.com/fFXnziKv

+0

如果你可以給我一個任何例子的鏈接,我將不勝感激。 – NDraskovic 2012-04-05 11:55:03

+1

這就是我以前用我的水平加載的方式,我的大學講師告訴我們這是爲了快速啓動我們的項目。 [鏈接](http://pastebin.com/fFXnziKv) 我儘可能多地評論了加載方法,希望你能理解它。 – Jon 2012-04-06 11:30:12

+0

這是一個很好的鏈接,謝謝,我需要一些時間來實現它,看看它是否適用於我(我認爲這應該是因爲我使用類似的方式來格式化數據在我的文件中)。再次感謝您的回答 – NDraskovic 2012-04-10 07:27:01

0

在XNA 4,如果你正在使用StorageContainer,你可以這樣做:

(...) 
StorageContainer storageContainer = //get your container 

Stream stream = storageContainer.OpenFile("Level.txt", FileMode.OpenOrCreate); 
StreamReader sr = new StreamReader(stream); 

while (!sr.EndOfStream) 
{ 
    String line = sr.ReadLine(); 
    //use line to do something meaningful 
} 
stream.Close(); 
storageContainer.Dispose(); 
(...) 

從個人的經驗,如果你去生TextReader的,唯一的問題是讓你的內容的路徑文件夾,這可以相對容易檢索(在Windows中!)

+0

我沒有使用StorageContainer(至少現在還沒有)。我會嘗試TextReader,但是當我嘗試使用File.ReadAllText方法時(當我插入編譯器引發我的Access異常的路徑時),我遇到了一些問題。 – NDraskovic 2012-04-10 07:31:36