2012-02-15 7 views
0

は、単純なタイルスクロールルーチンを作成し始めました。私はアニメーションの目的のためにいくつかの "フレーム"を持つテクスチャを持つために各タイルを必要とします。すべてのタイルが同じイメージを使用するので、私はメモリ使用量を心配しています。各タイルクラスはTexture2Dを使用しているため、各タイルインスタンスにイメージのコピーがあるか、Texture2Dのテクスチャが単一のテクスチャの参照になっていますか?私は42のタイルを持っていて、これは無駄になるので同じイメージの42のコピーを記憶に残したくありません。私が望むのは、1つの画像をTexture2Dとして参照する42タイルです。これは可能ですか、私はこれを別の方法でアプローチすべきですか?XNAで複数のTexture2Dベースのタイルを使用したメモリ使用

+1

http://rbwhitaker.wikidot.com/texture-atlases-2はなぜ同じにすべてのタイルに参照を与えていない、例えば、見て...私はかなりの質問を理解していないが、私はあなたがテクスチャアトラスを使用して見てみたいことが信じていますTexture2D、一度ロード? – Blorgbeard

答えて

0

C#では、基本的なデータ構造には、値が新しいメモリ領域にコピーされることを意味するバイパスパスがあります。影響を受けるデータ型は、string、int、floatなどの基本データ型のみです。

しかし、オブジェクトを持ち、それを値またはパラメータとして渡すか、別のvarに代入するだけでは、オブジェクト全体がコピーされません。その代わりに、宛先オブジェクトは古いオブジェクトのメモリ内のアドレスを取り出し、それを自身のオブジェクトとして記憶するが、依然として元のオブジェクトに戻る。

オブジェクトを新しいメモリ空間にコピーまたは割り当てるには、CopyTo() - メソッドを使用します。

0

Texture2dはgpuのテクスチャを参照します。必要に応じてグラフィックスメモリに同じテクスチャを2回保持できますが、この動作は望ましくないため、xnaは重複を避けるためにコンテンツマネージャを提供します。

Content.Load(アセット)を使用してアセットテクスチャをロードすると、コンテンツがロードされ、新しいtexture2dオブジェクトへの参照が保持されるので、次にそのアセットテクスチャをロードすると、同じtexture2d参照前に作成されます。

したがって、重複を避けるためにコンテンツマネージャを使用する必要があります。

関連する問題