繁体   English   中英

XNA中多个基于Texture2D的图块的内存使用情况

[英]Memory usage with multiple Texture2D based tiles in XNA

已经开始编写一个简单的平铺滚动例程。 我需要每个图块都具有一个具有多个“帧”的纹理,以用于动画目的。 由于所有图块都将使用同一图像,因此我担心内存使用情况。 当每个图块类使用Texture2D时,是否意味着每个图块实例将具有图像的副本,或者Texture2D中的纹理是对单个纹理的引用? 我有42个图块,并且我不希望在内存中拥有42张相同图像的副本,因为这样做会很浪费。 我想要的是42个图块,将单个图像引用为Texture2D。 这是可能的还是我应该以其他方式处理?

在C#中,正常做法是使基本数据结构具有按值传递,这意味着将值复制到新的存储区。 受影响的数据类型只是基本的数据类型,例如string,int,float等。

但是,当您拥有一个对象并将其作为值或参数传递或只是将其分配给另一个变量时,不会复制整个对象。 相反,目标对象将地址保存在旧对象的内存中,并将其存储为自己的对象,但仍与原始对象相同。

要将对象复制或分配给新的内存空间,请使用CopyTo()-Method。

Texture2d引用gpu中的纹理,并且您可以根据需要在图形内存中保留两次相同的纹理,但是这种行为是不希望的,因此xna提供了一个内容管理器来避免重复。

如果使用Content.Load(asset)加载资产纹理,则内容将对其进行加载,并保存对新Texture2d对象的引用,因此,下次加载该资产纹理时,它将返回之前创建的相同Texture2d参考。

因此,您只需要使用内容管理器即可避免重复。

我不太清楚这个问题,但我相信您可能想看看使用纹理图集...例如,看http://rbwhitaker.wikidot.com/texture-atlases-2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM