2014-04-04 48 views
2

我找遍了所有圍繞谷歌和這個網站有關此問題的相關信息,但不能解決它..LibGDX分辨率無關

我在遊戲開發和LibGDX一個新手,並不能找到很好的解釋解決方案關於如何將我的遊戲移植到各種不同的屏幕尺寸上。

您能否幫助我?

感謝名單

回答

4

在使用最新版本libgdx,你會發現Viewport類...

視口描述了屏幕的座標系(是從0,0中的像素的改造左下角例如1280,768在右上角(取決於設備))到您的遊戲和場景的座標系統。

視口類在如何做這種轉換方面有不同的可能性。它可以拉伸你的場景座標系來精確地適應屏幕座標系,這可能會改變縱橫比,例如「拉伸」你的圖像或按鈕。

也有可能與它的寬高比爲視,這可能會產生黑色的邊框,以適應場景視。例如。當你開發了4:3屏幕的遊戲,現在將它嵌入到16:10顯示器中。

的(在我看來)最好的辦法是通過匹配或者最長或最短邊裝配場景視到屏幕。

這種方式,你可以有一個屏幕/窗口從(0,0)座標系(1280,768),並創建你的遊戲座標,也許從(0,0)在橫向模式下系統(16,10) 。當匹配最長邊緣時,這意味着屏幕的左下角將爲(0,0),右下角爲(16,0)...在不具有相同寬高比的設備上,上角的y值可能會有所不同。

或匹配的最短邊時,這意味着你的場景座標將始終從(X,0)到(x 10)所示。但右邊緣可能不完全具備和16的x值,因爲設備分辨率不同...

當使用這種方法,你可能需要重新定位一些按鈕或UI元素,當他們都應該在頂部或右側邊緣被渲染...

希望它可以幫助...

1

一旦我也遇到這個問題,但在最終我得到了有效的解決方案,爲了實現L繪圖使用SpriteBatch任何東西,或舞臺ibgdx。使用正交相機我們可以做到這一點。

首先選擇一個最適合遊戲的恆定分辨率。在這裏,我採取了1280 * 720(風景)。

class ScreenTest implements Screen{ 
 
    
 
final float appWidth = 1280, screenWidth = Gdx.graphics.getWidth(); 
 
final float appHeight = 720, screenHeight = Gdx.graphics.getHeight(); 
 

 
OrthographicCamera camera; 
 

 
SpriteBatch batch; 
 
Stage stage; 
 

 
Texture img1; 
 
Image img2; 
 

 
public ScreenTest(){ 
 
    \t \t camera = new OrthographicCamera(); 
 
\t \t camera.setToOrtho(false, appWidth, appHeight); 
 
    \t \t 
 
     batch = new SpriteBatch(); 
 
    \t \t batch.setProjectionMatrix(camera.combined); 
 
    \t \t \t 
 
     img1 = new Texture("your_image1.png"); 
 
    \t \t img2 = new Image(new Texture("your_image2.png")); 
 
    \t \t img2.setPosition(0, 0); // drawing from (0,0) 
 
    \t 
 
     stage = new Stage(new StretchViewport(appWidth, appHeight, camera)); 
 
     stage.addActor(img2); 
 
    } 
 
    
 
    @Override 
 
\t public void render(float delta) { 
 

 
\t \t batch.begin(); 
 
\t \t batch.draw(img, 0, 0); 
 
\t \t batch.end(); 
 

 
\t \t stage.act(); 
 
\t \t stage.act(delta); 
 
\t \t stage.draw(); 
 
\t \t 
 
\t \t // Also You can get touch input according to your Screen. 
 
\t \t 
 
\t \t if (Gdx.input.isTouched()) { 
 
\t \t System.out.println(" X " + Gdx.input.getX() 
 
\t \t \t \t * (appWidth/screenWidth)); 
 
\t \t System.out.println(" Y " + Gdx.input.getY() 
 
\t \t \t \t * (appHeight/screenHeight)); 
 
\t } 
 
\t  
 
\t } 
 
    // 
 
    : 
 
    : 
 
    // 
 
}

運行這段代碼在任何類型的分辨率將要在沒有任何干擾這一決議進行調整。