Sunday, January 26, 2020

java - Libgdx: How to setZIndex for pause dialog?


Pause dialog has to appear on top of the play screen, it has to appear on top of other objects.


I have tried to use


dialog.setZIndex(10); // or whatever number and I tried adding it in many places

It just doesn't work, how to make the dialog be on top of other objects? for a ccomplete version here


I'm using only one batch and the stage is used only to add background and dialog


  stage = new Stage();
Gdx.input.setInputProcessor(stage);
stage.addActor(bg); // somewhere else in the code

stage.addActor(btnPause);
camera.update();
game.batch.setProjectionMatrix(camera.combined);
stage.act(delta);
stage.draw(); // and thats about it for stage
game.batch.begin();
font.setColor(Color.YELLOW);
font.draw(game.batch, myScore + score, Gdx.graphics.getWidth(), camY);
// and here I draw the game game.batch.draw(game) and I'm using only one batch


I hope I didn't miss anything


If I put the game batch in state.RUN in an effort to hide objects when the pause dialogue appears, then when I resume, it will go to batch.end and exit the game


Pause


public void pause() {
this.state = State.PAUSE;
final Dialog dialogP = new Dialog("", skin, "pauseDialog") {};

dialogP.setScale(4, 6);
dialogP.setPosition(Align.center, Gdx.graphics.getHeight());



dialogP.addAction(sequence(alpha(0),
parallel(fadeIn(.5 f)),
moveBy(0, -1000 f, .30 f, Interpolation.smooth),
moveBy(0, 30 f, .40 f, Interpolation.smooth)));

//PlayOn
ImageButton btnPlayOn = UIFactory.createButton(txtrPlayOn);
btnPlayOn.setSize(40, 40);
btnPlayOn.setPosition(75, 75, Align.center);

dialogP.addActor(btnPlayOn);

//EndGame
ImageButton btnEndGame = UIFactory.createButton(txtrEndGame);
btnEndGame.setSize(40, 40);
btnEndGame.setPosition(75, 55, Align.center);
dialogP.addActor(btnEndGame);

stage.addActor(dialogP);



//playOnAction
btnPlayOn.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
dialogP.hide();
resume();
}
});



//EndGameAction
//PlayButtonAcion
btnEndGame.addListener(
new InputListener() {
@Override
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
super.enter(event, x, y, pointer, fromActor);

Actions.scaleTo(0.7 f, 0.7 f, 0.5 f, Interpolation.bounceOut);

stage.addAction(Actions.sequence(Actions.moveBy(-stage.getWidth(), 0, .5 f), Actions.run(new Runnable() {
@Override
public void run() {
game.setScreen(new MainMenuScreen(game));
}
})));

}

});



}

The basic principle is implemented from the accepted answer to this question




No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...