2011-12-29 5 views
4

私は、Javaで作っているゲームに必要な、16×16ピクセルのタイル画像が1000個以上も含まれています。Javaでイメージをロードしてキャッシュする最良の方法は何ですか?

JVMの使用可能なメモリを使い果たすことなくタイルを保存するにはどうすればよいでしょうか?私は1000の+ BufferedImageの産卵することは賢明ではないかもしれないことを考えてい

...

は準備で画像を維持するための主な目的は、動的にマップファイルに基づいて生み出されるのロードマップ、のためです。

答えて

6

まず、すべての画像を実際に読み込んでいます。 16×16画素の画像は256000画素である。各ピクセルに4バイトを使用してもわずか1 MBのイメージデータが得られますが、それほど多くはありません。

メモリにロードするイメージの数を減らしたい場合は、マップに必要なビジュアルタイル/イメージをメモリにロードし、ゲームの応答性を高めるためにはもう少し多くをロードできます。例えば

あなたのゲームがnmによってタイルのマップを示している場合、あなたはメモリにn+2m+2によってタイルを読み込むか、視覚的に表すことができ(*メモリーに見えるタイルと+余分にロードされたタイルである):

+++++++++++ 
+*********+ 
+*********+ 
+*********+ 
+++++++++++ 

ユーザーがマップを移動すると、不要になったタイルへの参照が削除され、新しいタイルの読み込みが開始されます。メモリに1つのタイルが予約されているので、マップの移動はまだスムーズに行われるはずです。もちろん、あなたのタイルがかなり小さい場合、またはマップを動かすのがかなり速くなる場合、使用する余分なタイルの数を増やすことができます

0

メモリを大量に消費するため、1000以上の画像をバッファリングするのが最良の選択肢だとは思いません。おそらく100以上のようなほとんどの使用された画像をバッファリングするような異なるロジックを実装するほうが良いかもしれません(乱数を使用しますが、頻繁に使用される画像の数を把握する必要があります) 。

1

試しましたか? 1ピクセルあたり4バイトがある場合、16 x 16 x 4 x 1000は約1Mb +オーバーヘッドです。それ以上はそれほど重要ではありません。余裕がない場合は、大きな画像を作成して読み込み、必要に応じてタイルを抽出してください。

関連する問題