2011-05-13 111 views
4

如何支持libgdx(製作算法)以支持多屏幕分辨率?我使用if statments與像參數所做的HTC紋身我的應用程序的工作:Android libgdx大屏幕分辨率

if (Gdx.input.getX()==40) { 

什麼是好的算法制作上更大的屏幕這項工作? 我試過,但沒有任何結果:

publis static int translatex() { 
    float p = (float)Gdx.graphics.getHeight()*340; 
    return (int) p*Gdx.input.getX(); 
} 

340是宏達紋身使用我的底數x(我的手機在x分辨率)。 那麼.....我怎麼才能做出一個支持絕對值大屏幕的功能。我不想改變if語句。

回答

14

這很簡單。你基本上建立你的整個計劃的原始分辨率,但一切都處理的定位和紋理大小有這樣的事情:

private void resize() 
{ 
    float x = Gdx.graphics.getWidth(); 
    float y = Gdx.graphics.getHeight(); 

    float changeX = x/assumeX; //being your screen size that you're developing with 
    float changeY = y/assumeY; 

    position = new Vector2(position.x * changeX, position.y * changeY); 
    width = startWidth * changeX; 
    height = startHeight * changeY; 
    bounds = new Vector2 (position.x, (Gdx.graphics.getHeight() - position.y) - height); 

} 

基本上你正在做的是生成的每個對象,並通過一些運行它根據分辨率中x/y值的變化增加/減少。它來自本土越大,它會越大。當檢查某個地方或某處時,總是將其編碼爲您想要的分辨率,但是在顯示它之前通過調整大小函數來運行它,或者讓它與其餘的程序進行交互。

+0

有關實現的示例,請參閱libgdx wiki上的我的StringBuild教程。 – Remm 2011-05-14 21:30:40

+0

什麼是startWidth?並且resize函數有2個參數int width,int height,startWidth是寬度嗎? – Felix 2011-05-15 08:48:48

+0

在調整大小之前,起始寬度/高度將是原生紋理的大小。新的寬度和高度是相對於changeX和changeY的增加。邊界僅僅是一個矢量2,它支持對角的位置,所以你可以很容易地知道對象的邊界。 要創建的調用對象 - >獲取所有初始值,例如位置,寬度,高度 - >使用resize()函數轉換它們 - >將紋理繪製到屏幕上。當你需要知道紋理的基本尺寸,以便你可以正確拉伸它時,我們會在使用textureRegions的情況下保持startHeight和height分開。 – Remm 2011-05-15 15:35:44

3

看到http://www.java-gaming.org/index.php?topic=25685.0更優雅的解決方案(也請參閱Nate對該解決方案的評論)。

此外,如果您使用scene2d,請注意當前(libgdx 0.9.6)stage.setViewport方法應具有此功能,但它並不像預期的那樣運行。

更新: setViewPort是固定的,所以這個工作正如所料。