几次单击lib-gdx后按钮没有响应

时间:2017-05-24 01:57:34

标签: java android libgdx

我似乎无法找到答案。为什么我的开始按钮会在一定量的点击后冻结(3)?它适用于前3次点击,然后决定停止工作。我仍然可以看到屏幕响应(点击时按钮变为红色),但其上的文字不会改变。就像点击监听器停止响应一样。

public class MainMenu implements Screen{

    private Game game;
    private Stage stage;

    private TextButton Start_btn;
    private TextButton LocalWifi_btn;
    private TextButton Internet_btn;

    private TextButton Settings_btn;


    private boolean Start_clicked = false;
    private boolean LocalWifi_clicked = false;
    private boolean Internet_clicked = false;
    private boolean Settings_clicked = false;


    public MainMenu(Game g){
        game = g; //The Wasteland

        stage = new Stage(new ExtendViewport(Gdx.graphics.getWidth(),
                Gdx.graphics.getHeight())); //create a new stage with viewport to draw 2d stuff on

        Gdx.input.setInputProcessor(stage); //all input set to stage


        Skin skin = new Skin(Gdx.files.internal("gui/uiskin.json"), new TextureAtlas(Gdx.files.internal("gui/uiskin.atlas"))); //need this before you can make a gui

        Start_btn = new TextButton("" + Start_clicked, skin);

        Start_btn.setPosition(500, 500);
        Start_btn.setSize(200, 200);
        Start_btn.getLabel().setFontScale(10, 10); //change text size

        Start_btn.addListener(new ClickListener(){
            @Override
            public void touchUp(InputEvent e, float x, float y, int point, int button){
                onStartClicked();
            }
        });
        stage.addActor(Start_btn);

    }

    private void onStartClicked(){

        if(!Start_clicked){
            Start_clicked = true;
            Start_btn.setText("" + Start_clicked);
            Gdx.app.log("Button", "" + Start_clicked);

        }
        else{
            Start_clicked = false;
            Start_btn.setText("" + Start_clicked);
            Gdx.app.log("Button", "" + Start_clicked);

        }

    }

    @Override
    public void render(float delta) {

        //this has to be before anything or else it will be drawn on top of everything else
        Gdx.gl.glClearColor(0, 0, 0, 1); //set background color
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); //clears the screen

        stage.act(delta); //send ammount of time since last render call, tells it to keep a steady fps

        stage.draw();

    }

    @Override
    public void resize(int width, int height) {
        // use true here to center the camera
        // that's what you probably want in case of a UI
        stage.getViewport().update(width, height, true);


    }

}

我做错了什么?!?!?!

1 个答案:

答案 0 :(得分:0)

不要在不调用touchUp()的情况下覆盖super.touchUp(),因为它会破坏ClickListener的功能。但这不是你想要覆盖的东西。您应该覆盖clicked(),以便仅在按钮上方释放单击时触发。或者更好的是,使用ChangeListener。按钮已经内置了ClickListener,在单击按钮时会触发更改事件。只需使用ChangeListener,添加另一个ClickListener是多余的。