在Java中加载和缓存图像的最佳方法是什么?

Mag*_*Sun 4 java performance storage caching image

我有一个超过一千个16乘16像素平铺图像的大集合,我需要用于Java制作的游戏.

在不耗尽JVM可用内存的情况下存储磁贴的最佳方法是什么?

我认为产生1000+ BufferedImages可能并不明智......

保持图像准备就绪的主要目的是加载地图,这些地图将根据地图文件动态生成.

Rob*_*bin 6

首先,加载所有这些图像真的是一个问题.16乘16像素的1000个图像是256000个像素.即使每个像素使用4个字节也只会导致1 MB的图像数据,这并不多.

如果您真的想要/需要减少加载到内存中的图像数量,您只能将地图所需的可视图块/图像加载到内存中,还可以增加一些图像以提高游戏的响应速度.

例如,如果你的游戏显示地图nm瓷砖,你可以加载一个n+2m+2瓷砖到内存中,或在视觉上表示(其中*是可见的瓷砖+额外加载瓷砖到内存中):

+++++++++++
+*********+
+*********+
+*********+
+++++++++++
Run Code Online (Sandbox Code Playgroud)

当用户移动地图时,您将删除对不再需要的切片的引用,并开始加载新切片.由于您在内存中保留了一个磁贴,因此移动地图仍应非常顺利.当然,如果你的瓷砖相当小,或者移动地图的速度非常快,你可以增加你使用的额外瓷砖的数量