【发布时间】:2010-08-19 18:12:40
【问题描述】:
在 XNA 中,当调用 Content.Load() 加载资源时,如果您将相同的资源加载到多个对象中(例如,可以有多个弹丸的纹理),您是否会为每个对象获取一个副本,还是系统只是在内部为每个内存引用相同的内存?
我意识到在每个项目中都有一个单独的 Texture2D 对象可能是一个内存问题。
【问题讨论】:
在 XNA 中,当调用 Content.Load() 加载资源时,如果您将相同的资源加载到多个对象中(例如,可以有多个弹丸的纹理),您是否会为每个对象获取一个副本,还是系统只是在内部为每个内存引用相同的内存?
我意识到在每个项目中都有一个单独的 Texture2D 对象可能是一个内存问题。
【问题讨论】:
ContentManager 将缓存该对象并在您再次尝试加载该对象时返回对该对象的引用。
【讨论】:
是的,修改纹理数据将更改引用该数据的所有纹理。
如果您需要多个文件,请复制原始文件并加载不同的版本。
【讨论】:
您需要创建一个新的 Texture2D 对象,然后使用 SetData 方法将更改的数据复制到新纹理中:
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.texture2d.setdata.aspx
【讨论】: