2016-09-28 54 views
2

我已经看过一些程序和游戏,它们将数据存储在索引文件中,然后从文件中加载它们的数据,这些数据通常称为cacheJava在索引文件中存储多个图像,配置文件等?

我希望能够加载这样我的数据:

final int SPRITES_INDEX = 3; 

List<Sprite> sprites = (List<Sprite>) cache.loadIndex(SPRITES_INDEX); 

哪位知道它是如何做和为什么它这样做呢?或者是否有这种存储数据的方法的名称?

回答

3

你应该在“jar”文件中查找“resources”。这就是java世界中常用于这项工作的东西。通常情况下,一个jar文件只是一个zip文件,它是顺序的,但是多年前他们增加了索引jar文件的能力,它提供对其内容的随机访问。

你可以从这里开始:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/jar.html

(寻找“我”选项,它增加了一个索引的jar文件)

+0

我不确定他是否真的意味着索引文件......从他的问题的游戏环境中,他可能实际上是在谈论一个'Texture Package'(又名'Texture Atlas')。但在指定之前,你的回答是完全合理的,所以+1。 – XenoRo

1

至少对图像/渲染,这就是所谓的Texture Packing,并完成是因为OpenGL在渲染图像之前会“绑定”图像,并且这种绑定可能很昂贵,而且处理起来也很麻烦。

在较大的图像内封装纹理允许游戏/应用绑定一次,然后基于预定义像素坐标的索引,仅渲染较大图像的一部分,就好像它们是单独的较小图像一样。

我建议看看LibGDX的TexturePacker

提取物:

在OpenGL中,纹理必然,一些绘图完成后,另一个纹理 必然,更绘图完成,等绑定质地相对昂贵 ,所以它是理想的在较大的 图像上存储许多较小的图像,将较大的纹理绑定一次,然后绘制其中很多部分,其中很多为 次。 libgdx有一个TexturePacker类,它是一个命令行 应用程序,它将许多较小的图像打包到较大的图像上。它 存储较小图像的位置,因此它们很容易使用TextureAtlas类在应用程序中按名称引用 。

TexturePacker使用多种包装算法,但最重要的 基于最大矩形算法。它还使用强力 力量,包装与各种尺寸的众多启发式,然后 选择最有效的结果。


注意,这是一种类型的,和类似的但不相同的,的Caching的一般概念。

在计算机编程中,缓存包括专用一段内存来存储最近或经常使用的数据,以避免在每次需要/访问时必须重新创建/重新处理该数据。

因此,它与纹理打包的概念相似但不相同,它不是为了自己重新创建/重新处理图像,而是为了避免昂贵的复杂/过程。

考虑到问题的游戏环境,还需要注意另一个概念,这次更接近于缓存。它被称为Pooling,包括创建预先创建/预处理的对象实例的缓存(在这种情况下称为Pool),这些对象随着时间的推移可能需要不同的数量,例如RTS游戏中的单位,以避免在需要时创建它们(反过来避免处理中的突然“重量”,这导致FPS突然下降或在游戏的情况下“口吃”)。

+0

我没有想到这一点,因为OP提到“存储多个图像,配置文件”,这对我来说,直接指向jar文件。 (但他在*标题*中提到了这一点,而不是在问题的主体中。) –

相关问题