从内部类中访问的LibGDX变量

时间:2015-05-27 17:34:44

标签: java libgdx boolean listener final

我想创建一个方法(addButton),它可以完成构造函数现在所做的所有操作,但是需要一些变量。现在我卡住了因为有一个错误,说我需要做布尔决赛,但我不想这样做。我应该怎么做呢?

以下是代码:

    public void addButton(Table table,String key,boolean bool){

        atlas=new TextureAtlas(Gdx.files.internal("buttons/buttons.pack"));
        skin=new Skin(atlas);
        buttonStyle.up=skin.getDrawable(key+".up");
        buttonStyle.down=skin.getDrawable(key+".down");

        button=new Button(buttonStyle);
        button.addListener(new ClickListener(){
            @Override
            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                bool=true; //this boolean
                return super.touchDown(event, x, y, pointer, button);
            }

            @Override
            public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
                bool=false; //and this
                super.touchUp(event, x, y, pointer, button);
            }
        });
        table1.add(button);

    }

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。如果您只是想知道按钮是否被按下,可以使用Button.isPressed(),因为Button已经跟踪过了。

如果您想做其他事情,最好创建自己的MyButton extends ButtonMyButton可以有一个字段private boolean bool,并在构造函数中添加ClickListener。然后,此点击监听器将能够通过MyButton.this.bool访问按钮的字段,并可以更改它。

public class MyButton extends Button {

private boolean bool;

public MyButton(...) {

    addListener(new ClickListener(){
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
            MyButton.this.bool=true;
            return super.touchDown(event, x, y, pointer, button);
        }

        @Override
        public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
            MyButton.this.bool=false;
            super.touchUp(event, x, y, pointer, button);
        }
    });
}
}

另一种解决方案是保持当前的设置,但将原始值包装在另一个类中:

public class DataWrapper {
    public boolean bool;
}

public void addButton(Table table,String key, final DataWrapper data) {
    ...

    button=new Button(buttonStyle);
    button.addListener(new ClickListener(){
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
            data.bool=true;
            return super.touchDown(event, x, y, pointer, button);
        }

        @Override
        public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
            data.bool=false;
            super.touchUp(event, x, y, pointer, button);
        }
    });
    table1.add(button);
}