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

如何使用vb.net在XNA中启动后加载纹理,vb.net,xna,textures,Vb.net,Xna,Textures,最近我的游戏项目遇到了一个问题。当我在启动时加载超过一定数量的纹理(大约1000)时,我收到一个关于内存的错误(因为我必须在XNA中使用32位)。我是自学成才的,所以我只知道游戏编程的“正确”方法的基本知识。该项目本身正在变得非常大,虽然我试图压缩图像在一起等,我将不得不在整个项目中使用1000多个纹理 那么,我的问题是:如何使用vb.net在XNA启动时以外的时间点加载纹理?(我根本不使用我所知道的类,所以如果可能的话,我希望远离这些类) 感谢您对此的任何反馈! /克里斯汀我无法评论,所以我将

最近我的游戏项目遇到了一个问题。当我在启动时加载超过一定数量的纹理(大约1000)时,我收到一个关于内存的错误(因为我必须在XNA中使用32位)。我是自学成才的,所以我只知道游戏编程的“正确”方法的基本知识。该项目本身正在变得非常大,虽然我试图压缩图像在一起等,我将不得不在整个项目中使用1000多个纹理

那么,我的问题是:如何使用vb.net在XNA启动时以外的时间点加载纹理?(我根本不使用我所知道的类,所以如果可能的话,我希望远离这些类)

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

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

我正在使用一个名为GContent witch的类,它是“实例化”(更像是加载的)游戏开始时的第一件事。这个类是静态的,它有游戏中所有纹理、声音和精灵的列表。因此,我可以将
GContent.Texture(“Texture\u folder\\Texture\u name”)放在代码中的任何地方(类似于声音和精灵)。现在,在这个函数加载
Texture2D
之前,它会检查它的纹理列表,并尝试返回一个带有参数中要求的名称的纹理。如果找到了正确的纹理,它将从列表中返回纹理。如果不是,则使用
Content.Load(textureFilePath)
(完整路径我不是指“C:\Users\..”)要加载纹理,请给它一个与参数
TexturePath
相等的名称(
Texture2D.name
),将该纹理添加到列表中,然后返回新纹理

因此,如果我在游戏开始时没有加载所有资源,那么玩我的游戏越多,加载的纹理就越多。现在,我想象你可以简单地拥有一个
string
s数组,它表示单个关卡、贴图或主菜单使用的所有纹理。。。通过这种方式,您可以轻松创建函数,该函数将采用
列表
,并尝试加载或卸载一个贴图/关卡/菜单的所有纹理…

所以,我的答案是:拥有一个静态类,其中包含资产列表和从游戏中的任何位置加载/卸载资产!


另外,如果我的答案对您有帮助,请检查它作为一个答案:)

因此,如果我现在做得对,答案似乎比我预期的容易得多(?)

我只需在游戏开始时加载所有“世界”所需的内容(在受保护的覆盖子LoadContent()中),然后根据以后加载的世界(在我选择的任何子组件中)加载Dispose()和Load.content():

如果没有任何问题,我还没有意识到,这似乎做的诀窍,并没有留下我的记忆错误的开始


感谢您Davor MlinaricMonset帮助我前进

很有可能您不需要同时使用所有1000种纹理。所以,只要你不需要它们,就把它们卸下来。但最好是开始将相关纹理合并到单个图像(也称为精灵表)谢谢您的回答。是的,你是对的,这正是我发布我的问题的原因:)这是:如何在启动时以外的时间点加载纹理?(如果需要,我如何卸载它们?)你可以随时加载纹理,只要确保只加载一次即可。当你不需要它们的时候,就把它们处理掉。啊哈!怎么处理?哦。。我可以在更新子目录中的任意位置使用Content.Load(“…”)或Content.Unload(“…”)?
TextureName = Content.Load(Of Texture2D)("")
TextureName.Dispose()