Я пытаюсь создать экран «главного меню» с помощью одной кнопки. Однако эта кнопка является «незакрепленной», если для параметра Viewport установлено значение «unclickable» stage.If viewport не установлен, он становится clickable. Однако проблема со вторым подходом заключается в том, что изображения «меняют размер» в зависимости от разрешения устройств. Таким образом, они становятся меньше на устройствах с более высоким разрешением и наоборот. Вот код для справки:Как создать разрешение «Независимая» реализация Stage для scene2d ui LIBGDX
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);
}
Что должно быть сделано, чтобы сделать это зависит от разрешения, так что кнопка работает на различных разрешениях с той же относительной величины, которая не зависит от фактических пикселей.
Ваши методы изменения размера * полностью * неверны. Вы уверены, что прочитали [wiki] (https://github.com/libgdx/libgdx/wiki/Viewports) и поняли, какие видовые экраны действительно делают? – noone
Спасибо. Я думаю, теперь я запутался, если бы я понял это вообще или нет. Но процитировать из ссылки «The StretchViewport (source) поддерживает работу с размером виртуального экрана. Это означает, что можно предположить, что экран всегда размер виртуального винта x virtualHeight.Этот виртуальный просмотр будет всегда растягиваться, чтобы он соответствовал экрану ». Если я использую это, почему кнопка изображения не нажата? даже если в методе изменения размера, если я обновляю видовое окно, используя только виртуальный размер, кнопка делает не щелкнуть! Я что-то пропустил? – user1261913
Теперь метод изменения размера выглядит намного лучше. Но вы используете свое виртуальное разрешение только при создании 'StretchViewport'. При изменении размера вы должны обновить область просмотра с реальным размером (ширина, высота). Это будет * strech * ваше виртуальное разрешение в соответствии с вашим фактическим разрешением. – noone