如何使用 vb.net 在 XNA 中启动后加载纹理

How to load textures after startup in XNA using vb.net

最近我的游戏项目遇到了问题。当我在启动时加载超过一定数量的纹理(大约 1000 个)时,我收到有关内存的错误(因为我必须在 XNA 中使用 32 位)。我是自学成才的,因此只掌握 "correct" 游戏编程方法的基本知识。该项目本身变得非常大,尽管我尝试将图像压缩在一起等,但我将不得不在整个项目中使用超过 1000 个纹理。

那么我的问题是:如何使用vb.net在 XNA 启动时以外的其他时间点加载纹理? (据我所知,我根本没有使用 类,所以我希望尽可能远离它)

感谢您对此的任何反馈! /克里斯蒂安

我不能评论,所以我只是把我的想法放在这里。声明时间:我也是自学成才的开发人员,所以我使用的算法没有被证明是标准或类似的东西。希望能帮助到你!

我正在使用一个名为 GContent 的 class 是 "instanciated"(更像是加载)游戏开始时的第一件事。这个 class 是静态的,它有游戏中所有纹理、声音和精灵字体的列表。因此,我可以在代码中的任何位置放置 GContent.Texture("texture_folder\texture_name");(类似于声音和 spritefont)。现在,在这个函数加载 Texture2D 之前,它会检查它的纹理列表,并尝试 return 具有参数中要求的名称的纹理。如果它找到了正确的纹理,它会 return 从列表中选择纹理。如果不是,它使用 Content.Load(textureFullPath);(按完整路径我不是说 "C:\Users\....")加载纹理,给它一个等于参数 textureFullPath 的名称(Texture2D.Name) , 将该纹理添加到列表中,然后然后 return添加新纹理。

所以,如果我不在游戏开始时加载所有资产,那么你玩我的游戏越多,加载的纹理就越多。现在,我想你可以简单地拥有一个 strings 的数组来表示单个级别、地图或主菜单使用的所有纹理......这样,你可以轻松创建将采取的功能List< string > 并尝试加载 或卸载 一个 map/level/menu...

的所有纹理 所以,我的答案几乎是:有一个静态的 class,其中包含资产列表和 load/unload 资产,来自游戏中你想要的任何地方!

另外,如果我的回答对您有帮助,请将其作为答案查看:)

所以答案似乎比我预期的要容易得多,如果我现在做对了(?)。

我只是在游戏开始时加载所有 "Worlds" 所需的内容(在 Protected Overrides Sub LoadContent() 中)然后 Dispose() 和 Load.Content() 取决于什么稍后加载世界(在我选择的任何 Sub 中):

TextureName = Content.Load(Of Texture2D)("")
TextureName.Dispose()

如果没有任何我还没有意识到的问题,这似乎可以解决问题并且不会让我在开始时出现内存错误。

谢谢 Davor MlinaricMonset 对我的帮助