代码之家  ›  专栏  ›  技术社区  ›  matt

如何在WindowsPhone7中加载文件?使用XNA

  •  2
  • matt  · 技术社区  · 15 年前

    我正在将一个iphone游戏移植到windowsphone7中,iphone的工作原理与Winmo7非常相似,你可以将所有你想读取的文件添加到项目中。我们不希望在我们的资产创建管道中有这个额外的步骤,所以我们只是将所有文件都放入我们自己的基本文件归档中,然后只将一个归档文件添加到项目中。然后我们有一个资产构建过程,导出所有资产,然后从中创建此存档。

    在winmo7中,我惊讶地发现你不能做同样的事情。据我所知,加载数据的唯一方法是通过内容管道。我们很容易就解决了这个问题,只需制作一个contentImporter,将所有文件转换成byte[]并将它们导出为字节数组,然后您就可以简单地加载它们,直接访问文件中的所有字节。不幸的是,与c++不同的是,c++只是将内存强制转换为结构(因为文件已经以结构的格式存储了),c#似乎需要更手动的方法,即使用位转换器之类的工具将所有数据从字节数组加载到结构和类中。

    第二个问题是必须将所有资产添加到项目中的过程。我们决定不想像在iphone上那样只加载数据存档,因为我们确实希望对一些数据(比如声音)使用默认的contentimporter。但我们解决了这个问题,我们只需将一个文本文件(其中包含根数据目录)添加到项目中,然后创建一个ContentImporter,遍历该目录结构并对其中的所有文件调用“context.BuildAsset”。

    综上所述,我们有一个asset和ContentImporter,它自动处理数据目录中所有资产的导入,从而解决了必须手动将它们添加到项目中的问题。其中一些资产将通过默认的contentimporter(如声音、音乐和xmls)导入,而另一些资产将作为byte[]导入并手动加载,因为我们已经拥有了所需格式的资产。在这些资产的情况下,如果我们可以做'byte[]->在自定义ContentImporters中手动加载-脱机-但是对于我们尝试的第一个-纹理-它需要一个图形设备来创建本机Textue2D结构,而我们在ContentImporter框架中找不到。

    有什么想法吗?指针?或者这是做任何事情的最佳方式?我想另一个选择是将所有资源转换为默认纹理和网格处理器可以接受的格式,以及每个资源的参数(因此我们有一个手工制作的565纹理,将其转换回888 tga,然后通过默认纹理管道发送,参数为“convert this to 565”)

    3 回复  |  直到 15 年前
        1
  •  4
  •   matt    15 年前

    标题容器

    这是他们在4.0中添加的新类,它的显式性比文件类稍差一些

    只需转到TitleContainer.OpenStream(path)

        2
  •  3
  •   Mick N    15 年前

    打开一个文本文件并读取WP7项目中的内容是很简单的。这里有一个方法。

        Uri linesUri = new Uri("lines.txt", UriKind.Relative);
        StreamResourceInfo stream = App.GetResourceStream(linesUri);
        StreamReader streamReader = new StreamReader(stream.Stream);
        var contents = streamReader.ReadToEnd();
        streamReader.Close();
    

    我最初是从资源管理器中将lines.txt文件拖到我的项目中的,这段代码不需要其他处理。

    包括你需要的参考资料。。。

    using System.IO;
    using System.Windows.Resources;
    
        3
  •  0
  •   Dennis    15 年前

    一旦你提供更多细节,我会更新我的答案。

    推荐文章