我想创建一个方法(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);
}
答案 0 :(得分:1)
有很多方法可以做到这一点。如果您只是想知道按钮是否被按下,可以使用Button.isPressed()
,因为Button
已经跟踪过了。
如果您想做其他事情,最好创建自己的MyButton
extends Button
。 MyButton
可以有一个字段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);
}