2012-02-15 21 views
0

已開始編寫簡單的切片滾動例程。我需要每個瓷磚都有一個用於動畫目的的具有幾個「框架」的紋理。由於所有瓷磚都將使用相同的圖像,因此我擔心內存使用情況。由於每個tile類使用Texture2D,這是否意味着每個tile實例都將擁有該圖像的副本,或者是Texture2D中的紋理返回到單個紋理?我有42塊瓷磚,我不想在內存中擁有42份相同的圖像,因爲這會浪費。我想要的是42個tile將一個圖像引用爲Texture2D。這是可能的還是應該以不同的方式來解決這個問題?XNA中的多個基於Texture2D的切片的內存使用情況

+1

爲什麼不給所有的瓷磚參照同Texture2D,加載一次? – Blorgbeard 2012-02-15 17:01:13

回答

0

在C#它是normaly使得基本的數據結構由值通有一個,這意味着值被複制到新的存儲區域。受影響的數據類型只是像string,int,float等基本類型。

但是,當你有一個對象,並把它作爲價值或作爲參數或只是進行分配到另一個變種,而不是整個對象被複制。相反,目標對象將舊對象的內存中的地址存儲爲它自己的對象,但仍然接受原始對象。

要複製或對象分配給一個新的存儲空間使用copyTo() - 方法。

0

的Texture2D引用紋理的GPU,可以在顯存舉行兩次相同的紋理,如果你想要的,但這種行爲是不可取的,因此XNA提供了內容管理,以避免重複。

如果您使用Content.Load(資產)加載資產紋理,內容將加載它並保存對新紋理2d對象的引用,所以下次加載該資產紋理時,它將返回相同的texture2d引用之前創建。

所以你只需要使用內容管理器來避免重複。