libgdx-按下后退按钮时,舞台被禁用

无知

我正在使用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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章