Мой код полностью работоспособен, если я вынимаю экранное изменение размера. Но теперь я пробовал несколько устройств, включая планшет, и разрешение очень плохое. Поэтому я пытаюсь сохранить одинаковое соотношение сторон с помощью видового экрана. Я использую сцену, чтобы добавить свои кнопки и изображения. Мой кликлайнер отвечает на часть в желобе, а часть - на кнопку воспроизведения. Stackoverflow не позволяет мне размещать изображение из-за новой учетной записи. Может ли кто-нибудь помочь мне понять, что я делаю неправильно, и убедиться, что этот кусок кода работает на телефонах и на рабочем столе.Libgdx: Clicklistener не работает с изменением размера
private static final int VIRTUAL_WIDTH = 480;
private static final int VIRTUAL_HEIGHT = 800;
public void resize(int width, int height) {
// calculate new viewport
Vector2 size = Scaling.fit.apply(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, width, height);
int viewportX = (int)(width - size.x)/2;
int viewportY = (int)(height - size.y)/2;
int viewportWidth = (int)size.x;
int viewportHeight = (int)size.y;
Gdx.gl.glViewport(viewportX, viewportY, viewportWidth, viewportHeight);
}
@Override
public void show() {
batch = new SpriteBatch();
stage = new Stage();
camera = new OrthographicCamera(VIRTUAL_WIDTH, VIRTUAL_HEIGHT);
camera.setToOrtho(true, VIRTUAL_WIDTH, VIRTUAL_HEIGHT);
worldCoords = new Vector3(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, 0);
camera.unproject(worldCoords);
camera.update();
white = new BitmapFont(Gdx.files.internal("font/white.fnt"), true);
white.setScale(1f, -1f);
skin = new Skin();
atlas = new TextureAtlas("button.pack.pack");
skin.addRegions(atlas);
buttonStyle = new TextButtonStyle();
buttonStyle.up = skin.getDrawable("button");
buttonStyle.down = skin.getDrawable("buttonpressed");
buttonStyle.font = white;
buttonStyle.fontColor = Color.BLACK;
buttonPlay =new TextButton("Play", buttonStyle);
buttonPlay.setWidth(VIRTUAL_WIDTH/3);
buttonPlay.setHeight(VIRTUAL_HEIGHT/12);
buttonPlay.setPosition(stage.getViewport().getRightGutterWidth(), stage.getViewport().getWorldHeight()/2);
buttonPlay.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y){
((Game) Gdx.app.getApplicationListener()).setScreen(new MainFlow(g));
}
});
Gdx.input.setInputProcessor(stage);
Image img = new Image(new Texture(Gdx.files.internal("Optimized-BG_2.png")));
img.setFillParent(true);
stage.addActor(img);
stage.addActor(buttonPlay);
}
@Override
public void render(float delta) {
camera.update();
batch.setProjectionMatrix(camera.combined);
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();
}
класс Viewport делает все, что вы хотите. https://github.com/libgdx/libgdx/wiki/Viewports –