簡體   English   中英

Java將多個圖像,配置文件等存儲在索引文件中嗎?

[英]Java storing multiple images, config files and such in an indexed file?

我已經看到了一些程序和游戲,這些程序和游戲將其數據存儲在索引文件中,並且它們從該文件中加載數據,這些文件通常稱為cache

我希望能夠以這種方式加載我的數據:

final int SPRITES_INDEX = 3;

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

有誰知道它是怎么做的,為什么要這樣呢? 還是有這種存儲數據方法的名稱?

您應該在“ jar”文件中查找“ resources”。 這就是在Java世界中通常用於此工作的內容。 通常,jar文件只是一個zip文件,它是連續的zip文件,但是很多年前,他們添加了對帶索引的jar文件進行索引的功能,該文件提供了對其內容的隨機訪問。

您可以從這里開始: http : //docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/jar.html

(查找“ i”選項,該選項會向jar文件添加索引。)

至少對於圖像/渲染,這被稱為“ Texture Packing ,之所以如此,是因為OpenGL在渲染圖像之前先對其進行“綁定”,並且這種綁定在處理方面可能是昂貴的。

將紋理打包到較大的圖像內僅允許游戲/應用綁定一次,然后基於預定義像素坐標的索引,僅渲染較大圖像的一部分,就好像它們是分開的較小圖像一樣。

我建議看一下LibGDX的TexturePacker

提取:

在OpenGL中,綁定紋理,完成一些繪圖,綁定另一紋理,完成更多繪圖等。綁定紋理相對昂貴,因此理想的是在較大的圖像上存儲許多較小的圖像,然后綁定較大的紋理一次,然后多次繪制部分內容。 libgdx具有TexturePacker類,這是一個命令行應用程序,可將許多較小的圖像打包到較大的圖像上。 它存儲較小圖像的位置,因此可以使用TextureAtlas類在應用程序中按名稱輕松引用它們。

TexturePacker使用多種打包算法,但最重要的是基於最大矩形算法。 它還使用蠻力,以各種大小的大量試探法打包,然后選擇最有效的結果。


請注意,這是Caching的一般概念的一種,並且與之相似但不相同。

在計算機編程中,緩存包括將一部分內存專用於存儲最近或經常使用的數據,以避免每次需要/訪問時都必須重新創建/重新處理該數據。

因此,它與紋理打包的概念相似,但不完全相同,紋理打包並不是要重新創建/重新處理圖像本身,而是避免進一步的昂貴的復雜處理/過程。

考慮到問題的游戲背景,還需要注意的是,存在另一個更接近於緩存的概念。 它被稱為Pooling ,包括創建一個預先創建/預處理的對象實例的緩存(在本例中為Pool ),這些對象可能會隨着時間的推移而需要數量的變化,例如RTS游戲中的單位,避免在需要它們時必須創建它們(從而避免在處理過程中突然出現“重量”,從而在游戲中導致FPS突然下降或“口吃”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM