我正在尝试使用Scene2d构建菜单屏幕。屏幕有一个图像背景,一个图像按钮和一个显示最高分的对话框。我已经设法使用不同的屏幕尺寸进行缩放,但播放按钮仅在第一次触摸或点击时才会起作用,否则在第一次点击或触摸屏幕后触摸或点击它将变得不可见。如果有人告诉我这个问题,我会非常感激:p。
这是我的代码的主要部分
private Table buildControlsLayer(){
Table layer = new Table();
layer.center();
Dialog dialog = new Dialog("HighSocre: " + highScore, skinSea);
dialog.setColor(0, 0, 0, 1);
dialog.setOrigin(Align.center);
dialog.setScale(1.5f);
layer.add(dialog).padBottom(100);
layer.row();
btnPlay = new Button(skinSea, "play");
layer.add(btnPlay);
btnPlay.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
onPlayClicked();
}
});
layer.setFillParent(true);
return layer;
}
private void rebuildStage(){
atlas = new TextureAtlas(Constants.TEXTURE_ATLAS_UI);
skinSea = new Skin(Gdx.files.internal(Constants.SKIN_SEA_UI), atlas);
imgBackground = new Image(skinSea, "BackGround");
imgBackground.setFillParent(true);
layerControl = buildControlsLayer();
stage.clear();
stage.addActor(imgBackground);
stage.addActor(layerControl);
stage.setDebugAll(true);
}
@Override public void show() {
stage = new Stage(new ExtendViewport(Constants.VIEWPORT_WIDTH, Constants.VIEWPORT_HEIGHT));
Gdx.input.setInputProcessor(stage);
rebuildStage();
this.resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Gdx.input.setCatchBackKey(true);
}
@Override public void resize(int w, int h) {
stage.getViewport().update(w, h, false);
imgBackground.setSize(w, h);
}
@Override public void render(float deltaTime){
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(deltaTime);
stage.draw();
}
顺便说一句,最初我创建了一个包含背景图片的表格,我将表格的大小设置为屏幕大小并将其设置为setFillParent(true)
,但背景不在正确的位置。我试图设置表格位置,而不是setFillParent(true)
,并尝试将其大小设置为正确的大小,但背景图像始终不在正确的位置,或者它的刻度较差。我设法通过不将图像添加到表中但将其直接添加到舞台来解决此问题。如果您知道如何使用,请告诉我使用包含背景图像的表的方法。