AndroidStudio libgdx ChangeListener无法正常工作

时间:2016-04-24 05:15:46

标签: java android android-studio libgdx

Android Studio-libgdx制作2D游戏。 我有一个Main,它创建了MenuState,在我做的这个

的渲染方法中
    @Override
    public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0.2f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.update();
    myGame.batch.setProjectionMatrix(camera.combined);
    batch = new SpriteBatch();
    skin = new Skin(Gdx.files.internal("data/uiskin.json"));
    stage = new Stage();

    final TextButton button = new TextButton("Click me", skin, "default");

    button.setWidth(400f);
    button.setHeight(100f);
    button.setPosition(Gdx.graphics.getWidth() / 2 - 100f, Gdx.graphics.getHeight() / 2 - 10f);

    button.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            Gdx.gl.glClearColor(1, 0, 0, 1);
            Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        }
    });
    stage.addActor(button);

    Gdx.input.setInputProcessor(stage);

    myGame.batch.begin();
    stage.draw();
    myGame.batch.end();
}

我检查了一些关于如何制作菜单的教程,这几乎就是我在这里测试的内容。 但是当我运行应用程序时,按钮出现,如果我点击它就没有任何反应。 我已尝试使用ClickListener进行测试,但仍无法正常工作。有任何想法吗?或者我做错了还是应该用另一种方法? 我是libgdx的新手。提前致谢。

1 个答案:

答案 0 :(得分:0)

您是否正在渲染方法中创建舞台,外观和批处理的新实例?将它们从渲染方法中移开;)

渲染看起来应该更像这样:

    @Override
        public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0.2f, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        camera.update();
        myGame.batch.setProjectionMatrix(camera.combined);

        myGame.batch.begin();
        stage.draw();
        myGame.batch.end();
}

在构造函数中:

    batch = new SpriteBatch();
    skin = new Skin(Gdx.files.internal("data/uiskin.json"));
    stage = new Stage();

    final TextButton button = new TextButton("Click me", skin, "default");

    button.setWidth(400f);
    button.setHeight(100f);
    button.setPosition(Gdx.graphics.getWidth() / 2 - 100f, Gdx.graphics.getHeight() / 2 - 10f);

    button.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            Gdx.gl.glClearColor(1, 0, 0, 1);
            Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        }
    });
    stage.addActor(button);

    Gdx.input.setInputProcessor(stage);