我正在使用libgdx处理游戏,但刚刚发现我将如何针对各种屏幕尺寸实现它?我想出了如何定位不同尺寸和分辨率的图像,但我们如何让精灵支持不同的屏幕尺寸?我在320x480上的背景很好,但在480乘800的情况下占据一个非常小的位置,如何在所有屏幕上工作?
答案 0 :(得分:5)
根据您的喜好,您有多种选择,
一个。您可以使用一组缩小的HQ精灵来适应每个屏幕,例如;
in resize()
width = arg0;
height = arg1;
然后在你的render()
中batch.draw(textureRegion, -width/2, -height/2, width, height);
将在整个屏幕上绘制一个精灵(假设正交相机以0,0为中心)
湾您可以为不同的分辨率使用不同的精灵集合,然后根据视口的尺寸加载一组精灵。
答案 1 :(得分:3)
你可以使用scene2d。 在那里,您可以通知现场,窗口已在应用程序中调整大小
@Override
public void resize(int width, int height) {
stage.setViewport(width, height, true);
...
}
答案 2 :(得分:0)
请看一下这个链接:How to deal with different aspect ratios in libGDX?
应该回答你的问题。我已经实现了它,它对我很有用。
答案 3 :(得分:0)
将屏幕划分为虚拟单位,例如网格10x10。 根据实际屏幕尺寸计算虚拟单位。
VIRTUAL_UNIT_WIDTH = Gdx.graphics.getWidth()/10;
VIRTUAL_UNIT_HEIGHT = Gdx.graphics.getHeight()/10;
通过这些虚拟单位设置精灵大小,并在调用spriteBatch.draw()时使用虚拟单位;
像这样,您可以通过各种屏幕分辨率保持相同的游戏宽高比。
希望这能给你一个想法。
答案 4 :(得分:0)
我正在使用以下方法,它适用于几乎所有屏幕尺寸都有可忽略的轻微缩放问题。
我总是使用图形图像作为屏幕尺寸1920.0x1080.0
ScreenViewport screenViewport=new ScreenViewport(camera);
screenViewport.setUnitsPerPixel(Math.min(1920.0f/Gdx.graphics.getWidth(),1080.0f/Gdx.graphics.getHeight()));
stage = new Stage(screenViewport);
@Override
public void resize (int width, int height) {
ScreenViewport screenViewport= (ScreenViewport) stage.getViewport();
screenViewport.setUnitsPerPixel(Math.min(1920.0f/width,1080.0f/height));
screenViewport.update(width,height,false);
}
您可以在此处设置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屏幕的位置。