簡體   English   中英

libgdx-按下后退按鈕時,舞台被禁用

[英]libgdx - stage was disabled when back button pressed

我正在使用libgdx 1.9.0進行游戲開發。 我在主屏幕上有一個包含多個按鈕的階段。 我還有另一個顯示游戲對象的屏幕代碼。 當按下android設備中的后退按鈕時,主屏幕中的舞台將被禁用,並且按鈕的偵聽器功能不起作用。 在主屏幕中,我有:

public class MainMenuScreen extends ScreenAdapter {
TextButton button_start; 
TextButtonStyle textButtonStyle;
BitmapFont font;

FitViewport viewp;
Stage stage;

public MainMenuScreen(IndependentArch game) {
    this.game = game;


    /* add GUI controls */
    stage = new Stage(new StretchViewport(game.SCREEN_WIDTH,
            game.SCREEN_Height), game.batcher);
    Gdx.input.setInputProcessor(stage);

    textButtonStyle = new TextButtonStyle();
    textButtonStyle.font = Assets.font_btitr;
    textButtonStyle.up = Assets.skin.getDrawable("button");
    textButtonStyle.down = Assets.skin.getDrawable("button-down");

    button_start = new TextButton(Reshape.doReshape_mirror("start"),
            textButtonStyle);
    button_start.setBounds(0, 0, 200, 50);
    button_start.setPosition(140, 255);

    button_about.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {

             MyTextInputListener listener = new MyTextInputListener();
            Gdx.input.getTextInput(listener, "name", "",
             "please enter your name.");

        }
    });

    stage.addActor(button_start);

}

public void update() {
    if (Gdx.input.justTouched()) {
        stage.getCamera().unproject(
                touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0));

    }
}

public void draw(float delta) {
    Gdx.gl.glClearColor(0.09f, 0.28f, 0.2f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    game.batcher.disableBlending();
    game.batcher.begin();
    game.batcher.draw(Assets.backgroundRegion[0], 0, 0, game.SCREEN_WIDTH,
            game.SCREEN_Height);
    game.batcher.end();

    stage.act(delta);
    stage.draw();

    game.batcher.enableBlending();
    game.batcher.begin();


    game.batcher.draw(Assets.uiskin.findRegion("music"),
            game.SCREEN_WIDTH - 90, 10, 80, 80);

    game.batcher.end();
}

@Override
public void render(float delta) {
    update();
    draw(delta);
}} 

在游戲屏幕中,我有:

 public class GameScreen implements Screen, InputProcessor {
OrthographicCamera guiCam;
    Vector3 touchPoint;
World world;
WorldRenderer renderer;

CameraController camController;
InputMultiplexer multiplexer;

GestureDetector gestureDetector;

/** for debug rendering **/

ShapeRenderer debugRenderer = new ShapeRenderer();

int lastScore;
String scoreString;
float totalGameTime;

GlyphLayout glyphLayout = new GlyphLayout();

public GameScreen(IndependentArch game) {
    this.game = game;

    Gdx.input.setCatchBackKey(true);


    state = GAME_READY;
    guiCam = new OrthographicCamera(game.SCREEN_WIDTH, game.SCREEN_Height);
    guiCam.position.set(game.SCREEN_WIDTH / 2, game.SCREEN_Height / 2, 0);
    touchPoint = new Vector3();

    world = new World();
    renderer = new WorldRenderer(game.batcher, world);
    Gdx.input.setInputProcessor(this);

    camController = new CameraController(world);
    multiplexer = new InputMultiplexer();
    multiplexer.addProcessor(new GestureDetector(20, 0.5f, 2, 0.15f,
            camController));
    multiplexer.addProcessor(this);
    Gdx.input.setInputProcessor(multiplexer);

}


// * InputProcessor methods ***************************//

@Override
public boolean keyDown(int keycode) {

    if (keycode == Keys.BACK) {
        game.setScreen(new MainMenuScreen(game));
        // Gdx.app.exit();
    }

    return false;
}}

覆蓋主菜單屏幕中的show()方法,並將輸入處理器設置為stage

@Override
public void show() {
    Gdx.input.setInputProcessor(stage);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM