2011-12-29 3 views
4

나는 Java로 만들고있는 게임에 필자가 필요로하는 16 x 16 픽셀의 타일 이미지가 많이 있습니다.Java에서 이미지를로드하고 캐시하는 가장 좋은 방법은 무엇입니까?

JVM의 사용 가능한 메모리를 소모하지 않고 타일을 저장하는 가장 좋은 방법은 무엇입니까? 나는 1000 BufferedImage의 산란하는 것은 현명하지 않을 수도 있음을 생각하고

...

는 준비에서 이미지를 유지하는 주요 목적은 동적으로 맵 파일을 기반으로 양산 될 것이다로드 맵입니다.

답변

6

먼저 이미지를 모두로드하는 중입니다. 16x16 픽셀의 1000 이미지는 256000 픽셀입니다. 각 픽셀에 대해 4 바이트를 사용하는 경우에도 단지 1MB의 이미지 데이터가 발생하지만 그리 많지는 않습니다.

메모리에로드하는 이미지 수를 줄이거 나 줄이려면 맵에 필요한 시각적 타일/이미지를 메모리에로드하고 게임에 대한 응답 성을 높이려면 몇 가지 정도만로드하면됩니다.

예를 들어

게임이 nm에 의해 타일의지도를 표시하는 경우, 당신은 (* 메모리로 볼 수 타일 + 여분의로드 타일 곳) 대표 시각적 메모리에 n+2m+2으로 타일을로드하거나 수 :

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

사용자가지도를 움직이면 더 이상 필요하지 않은 타일에 대한 참조를 제거하고 새 타일로드를 시작합니다. 메모리에 하나의 타일이 예약되어 있기 때문에 맵 이동은 여전히 ​​원활하게 이루어져야합니다. 물론 타일이 다소 작거나 맵 이동 속도가 매우 빠르면 사용하는 여분의 타일 수를 늘릴 수 있습니다

0

많은 메모리를 소비하기 때문에 1000 개 이상의 이미지를 버퍼링하는 것이 가장 좋은 방법이라고 생각하지 않습니다. 버퍼와 같은 다른 논리를 구현하는 것이 더 좋을 수도 있습니다. 예를 들어, 100 개 정도의 이미지를 사용합니다 (난수를 사용했으나 빈번하게 사용되는 이미지의 수를 계산해야합니다). .

1

시도해 보셨습니까? 픽셀 당 4 바이트가있는 경우 16 x 16 x 4 x 1000은 약 1Mb + 오버 헤드입니다. 더 이상 그다지 중요하지 않습니다. 당신이 그것을 감당할 수 없다면, 아마도 더 큰 이미지를 만들고 그것들을로드 한 다음 필요에 따라 타일을 추출하십시오.

관련 문제