如何为 LIBGDX 的 scene2d ui 创建 Stage 的分辨率 "Independent" 实现

How to create a resolution "Independent" implementation of Stage for scene2d ui of LIBGDX

我一直在尝试创建一个带有单个 button.This 按钮的 "main menu" 屏幕,但是 'unclickable' 如果为 stage.If 设置了视口,则视口是未设置它变成 clickable.The 然而,第二种方法的问题是图像 "change size" 取决于 devices.So 的分辨率,它们在更高分辨率的设备上变得更小,反之亦然。 这是供您参考的代码:

 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);
         }

应该怎么做才能使其与分辨率无关,以便按钮在不同的分辨率下工作,具有相同的相对大小,而不依赖于实际像素。

所以这个问题的答案在于 Libgdx.The 中的视口有两个特定大小方面,第一个是要显示的 "part of your game world",第二个是 "the part of your screen" 你想在上面展示你的世界(而不是你世界的一部分)。 要告诉 Libgdx 你想展示世界的哪个部分,你可以使用 viewports.Like 的构造函数,所以:

new StretchViewport(worldViewportwidth,worldViewportheight)

现在为了告诉Libgdx你的屏幕的哪一部分(部分屏幕、全屏等)使用视口上的更新方法:

public void resize(int width, int height) {
         stage.getViewport().update(width,height,true);
}

现在,舞台应该能够接受输入(如果其他一切都正确的话)并且舞台在不同设备上可以正确显示