2014-08-31 29 views
3

我目前正在使用正視相機。在我進入遊戲之前,我想先修正屏幕大小。目前,我的屏幕尺寸已設置爲800 x 480.這樣可以在其他設備和屏幕尺寸上正常工作嗎?現在我所擁有的就是一個閃屏和遊戲畫面。我需要添加哪些代碼才能實現這一點。LibGDX - 如何讓我的遊戲在所有屏幕分辨率上都能正常工作?

+0

使用像本機avd或genymotion這樣的模擬器來跨多個陣列進行測試。沒有做過多的libgdx工作,但這就是我通常測試解決方案的方式。 – zgc7009 2014-08-31 01:26:19

+0

看看關於視口的libgdx的維基。我想你會找到更好的解決方案! https://github.com/libgdx/libgdx/wiki/Viewports – BennX 2014-09-01 12:32:39

回答

6

在相機上擁有一個靜態寬度是完全可以的,因爲它爲您的遊戲提供了一個可以可靠工作的固定維度。這是有效的,因爲相機被用來定義世界座標,而這些世界座標並不總是與屏幕座標一一對應。

您的問題來自固定的相機高度。根據設備屏幕的高寬比,固定高度會導致屏幕拉長或縮短。如果您想考慮不同的長寬比,則需要將顯示比例乘以相機高度(當前爲480)。您可以通過將高度除以寬度除以高度來獲得屏幕比例。這看起來是這樣的:

float width = Gdx.graphics.getWidth(); 
float height = Gdx.graphics.getHeight(); 

OrthographicCamera camera = new OrthographicCamera(800, 480 * (height/width)); 

正如BennX在評論中指出,LibGDX推出視窗,讓你做很多同樣的事情上面,只是以不同的方式。爲了達到與上面概述的效果相同的效果,只需使用視口,就可以使用ExtendViewport。它所做的就是將世界的大小保持在一個方向,同時向另一個方向延伸。因此,世界將首先放大以填滿屏幕,然後在保持縱橫比的同時擴大較短的尺寸。要創建這種類型的視口,它會是這個樣子:

OrthographicCamera camera = new OrthographicCamera(800, 480); 
ExtendViewport viewport = new ExtendViewport(800, 480, camera); 

視口上面會有800的最小寬度和480這些值的一個最低高度將是視後的相同被應用,另一個將根據屏幕的高寬比而改變。更窄的屏幕將具有更多的垂直空間,而更寬的屏幕將具有更多的水平空間。有關視口的更多信息,請訪問LibGDX wiki頁面here

+0

我不認爲它是一個很好的解決方案。 Libgdx特別爲這個問題實現了Viewports,就像4個月前那樣做了所有的事情。 https://github.com/libgdx/libgdx/wiki/Viewports – BennX 2014-09-01 12:35:13

+1

@BennX感謝您的領導。我仍然使用稍微老一點的引擎,它沒有視口,所以我不知道這個解決方案。我已經更新了答案以反映這兩種解決方案。 – MCeley 2014-09-01 15:48:13

+0

@Mceley我需要將這行代碼應用到我的應用程序的每個屏幕上嗎? – Dakota 2014-09-02 01:22:31

0

我正在使用下面的方法,它幾乎適用於所有屏幕大小與輕微縮放問題。

我總是使用圖形圖像屏幕尺寸1920.0x1080.0

ScreenViewport screenViewport=new ScreenViewport(camera); 
screenViewport.setUnitsPerPixel(Math.min(1920.0f/Gdx.graphics.getWidth(),1080.0f/Gdx.graphics.getHeight())); 

在這裏,你可以從Math.min()或Math.max()設置你的方法。

這將導致您的相機視圖端口大小接近1920.0 * 1080.0

Device screen-size Math.max()  Math.max() 
800.0x480.0  1800.0x1080.0 1920.0x1152.0 
1920.0x1080.0  1920.0x1080.0 1920.0x1080.0 
2048.0x1440.0  1536.0x1080.0 1920.0x1350.0 

注:始終使用camera.viewportWidth和camera.viewportHeight對於遊戲UI界面的設定位置。