2012-04-05 67 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