如何为 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);
}
现在,舞台应该能够接受输入(如果其他一切都正确的话)并且舞台在不同设备上可以正确显示
我一直在尝试创建一个带有单个 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);
}
现在,舞台应该能够接受输入(如果其他一切都正确的话)并且舞台在不同设备上可以正确显示