我一直试图用一个按钮创建一个“主菜单”屏幕。但是,如果为舞台设置了视口,则此按钮是“无法点击的”。如果未设置视口,则该按钮变为可点击。然而,第二种方法是图像根据设备的分辨率“改变尺寸”。因此它们在较高分辨率的设备上变小,反之亦然。 以下是供您参考的代码:
mainMenu(Game mainGame){
camera = new OrthographicCamera();
menuCam = new OrthographicCamera();
allVariables.Graphics_viewport_height = (allVariables.Graphics_viewport_width*Gdx.graphics.getHeight())/Gdx.graphics.getWidth();
camera.setToOrtho(false, allVariables.Graphics_viewport_width, allVariables.Graphics_viewport_height);
camera.update();
menuCam.setToOrtho(false,allVariables.Graphics_viewport_width,allVariables.Graphics_viewport_height);
menuCam.update();
maingame = mainGame;
batch = new SpriteBatch();
stage = new Stage();
stage.setViewport(new StretchViewport(allVariables.Graphics_viewport_width,allVariables.Graphics_viewport_height));
stage.getViewport().setCamera(menuCam);
table = new Table();
ImageButton.ImageButtonStyle playButtonStyle = new ImageButton.ImageButtonStyle();
playButtonStyle.imageDown = AllAssets.instance.skin.getDrawable("play_up");
playButtonStyle.imageUp = AllAssets.instance.skin.getDrawable("play_dn");
playButtonStyle.pressedOffsetY = 10;
playButtonStyle.pressedOffsetX = 10;
play = new ImageButton(playButtonStyle);
table.setFillParent(true);
table.align(Align.top);
table.add(play).minSize(100, 200);
table.debug();
stage.addActor(table);
Gdx.input.setInputProcessor(stage);}
调整大小方法:
public void resize(int width, int height) {
stage.getViewport().update(allVariables.Graphics_viewport_width,allVariables.Graphics_viewport_height,true);
}
应该做些什么才能使分辨率独立,以便按钮可以在不同的分辨率上工作,相对大小不依赖于实际像素。
答案 0 :(得分:1)
因此,这个问题的答案在于,Libgdx中的视口有两个特定尺寸方面。第一个是你想要展示的“游戏世界的一部分”,第二个是“屏幕的一部分” “你想要展示你的世界(而不是你的世界的一部分)。 要告诉Libgdx您希望显示的世界的哪个部分可以使用视口的构造函数。所以:
new StretchViewport(worldViewportwidth,worldViewportheight)
现在,为了告诉Libgdx屏幕的哪一部分(屏幕的部分内容,全屏等)在视口上使用更新方法:
public void resize(int width, int height) {
stage.getViewport().update(width,height,true);
}
现在,舞台应该能够接受输入(如果其他一切也正确),舞台在不同的设备上可以正确显示