2014-12-22 12 views
1

如何實現一個採用基於dpi的最佳紋理的系統,像android SDK一樣,因爲LibGDX是獨立於平臺的,並且不能使用已有的系統?Libgdx基於DPI選擇正確的紋理?

+0

您可能想要把你發佈的東西放到一些更集中的東西上。想象一下,你正在寫一封電子郵件給你的同事。我們很難閱讀段落和段落,並找出你想要的。給出幾個背景句子,解釋你需要什麼,然後明確地陳述你的問題。這樣,我們就能更容易地幫助你。 –

+0

http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/assets/loaders/resolvers/ResolutionFileResolver.html – Xoppa

+0

解決方案文件句柄不是我正在尋找的......需要一個基於預定義分辨率的一組圖像,而在android中,繪圖是基於dpi選擇的......這是一個很大的區別 – Andrew

回答

3

可能是我的解決方案不是最好的,但我用它在真正的項目,它的工作。

在你Game類使用Gdx.graphics.getDensity()方法來選擇相應的文件夾,在公共領域的存儲它的名字並載入您的資產:在你其他類中使用的文件夾名稱從AssetManager獲得資產

public class MyGame extends Game { 

public static String folder; 
private AssetManager assets; 

@Override 
public void create() { 
    if (Gdx.graphics.getDensity < 1) { 
     folder = "lowDpiImages/"; 
    } else { 
     folder = "highDpiImages/"; 
    } 
    ... 
    assets = new AssetManager(); 
    assets.load(folder + "image.png", Texture.class, paramsNearest); 
    ... 
} 

然後:

assets.get(MyGame.folder + "image.png", Texture.class); 

您可以編寫更復雜的文件夾選擇算法的原因;-)

+0

這是非常有幫助的。我剛剛實現了這一點,似乎工作正常。我還有一個問題。我嘗試了getDesnity方法,並且發現我的密度將被舍入。例如,在213 dpi上,它將是240 dpi,意思是1.5比例。這是正常的嗎? – Andrew

+0

這沒關係。打開這個[doc](https://developer.android.com/reference/android/util/DisplayMetrics.html#density)並閱讀'Fields'中的'public float density'。它的值由LibGDX中的Android後端的'getDensity()'方法返回。 – Rara