2011-12-29 135 views
4

我有一個超過1000個16x16像素的平鋪圖像的大集合,我需要用我在Java中製作的遊戲。在Java中加載和緩存圖像的最佳方式是什麼?

在不耗盡JVM的可用內存的情況下存儲切片的最佳方式是什麼?

我在想,產卵1000+ BufferedImages可能並不明智...

保持圖像在準備的主要目的是用於加載地圖,這將根據地圖文件中動態生成。

回答

6

首先,加載所有這些圖像確實是一個問題。 16乘16像素的1000幅圖像是256000像素。即使每個像素使用4個字節也會導致只有1 MB的圖像數據,這並不多。

如果您確實需要/需要減少您加載到內存中的圖像數量,則只能將地圖所需的可視圖像/圖像加載到內存中,還有一些可以提高遊戲的響應速度。

例如,如果你的遊戲顯示地圖n通過m瓷磚,你可以加載一個n+2通過m+2瓷磚到內存中,或在視覺上表示(其中*是可見的瓷磚+額外加載瓷磚到內存):

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

當用戶移動地圖時,您將刪除對不再需要的貼圖的引用,並開始加載新的貼圖。既然你在內存中保留了一塊圖塊,移動地圖的過程應該還是很順利。當然,如果你的瓷磚比較小,或者移動地圖的速度相當快,你可以增加你使用的額外瓷磚的數量

0

我不認爲緩衝1000 +圖像是最好的選擇,因爲它消耗大量的內存。也許最好是實現不同的邏輯,像緩衝區最常用的圖像像100左右(只是使用隨機數,但你需要知道多少頻繁使用的圖像將是),如果有任何圖像比這些緩存,需要時加載它們。

1

你試過了嗎?如果每個像素有4個字節,則16 x 16 x 4 x 1000約爲1Mb +開銷。這已經不是什麼了。如果你買不起,那麼可能會創建更大的圖像,加載這些圖像,然後在需要時提取這些圖塊。

相關問題