Java 单击鼠标按钮时更新标签的LibGDX
我有一个从0到100的浮点值,我想注册一次长时间的点击,然后逐步更新标签,这样标签的文本就会像每0.25秒更新一次一样。目前,我正在使用一个定制标签,该标签有一个更新显示文本的方法。Java 单击鼠标按钮时更新标签的LibGDX,java,libgdx,label,Java,Libgdx,Label,我有一个从0到100的浮点值,我想注册一次长时间的点击,然后逐步更新标签,这样标签的文本就会像每0.25秒更新一次一样。目前,我正在使用一个定制标签,该标签有一个更新显示文本的方法。 我试过这样触地得分: while (Gdx.input.isButtonPressed(Buttons.LEFT)) { double currentValue = Double.parseDouble(Button.getText() .toString()); if ((
我试过这样触地得分:
while (Gdx.input.isButtonPressed(Buttons.LEFT)) {
double currentValue = Double.parseDouble(Button.getText()
.toString());
if ((int) currentValue != 0)
currentValue--;
Button.updateText(Double.toString(currentValue));
}
但这似乎不起作用,单击按钮时如何更新标签
编辑:ClickListener的大部分代码:
@Override
public void enter(InputEvent event, float x, float y, int pointer,
Actor fromActor) {
super.enter(event, x, y, pointer, fromActor);
TextButtonStyle style = ButtonLower.getStyle();
style.font = red;
ButtonLower.setStyle(style);
}
@Override
public void exit(InputEvent event, float x, float y, int pointer,
Actor toActor) {
super.exit(event, x, y, pointer, toActor);
TextButtonStyle style = ButtonLower.getStyle();
style.font = white;
ButtonLower.setStyle(style);
}
@Override
public void clicked(InputEvent event, float x, float y) {
super.clicked(event, x, y);
System.out.println(event.toString());
double currentValue = Double.parseDouble(Button.getText()
.toString());
if ((int) currentValue != 0)
currentValue--;
Button.updateText(Double.toString(currentValue));
}
@Override
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
if (Gdx.input.isButtonPressed(Buttons.LEFT)) {
double currentValue = Double.parseDouble(Button.getText()
.toString());
if ((int) currentValue != 0)
currentValue--;
Button.updateText(Double.toString(currentValue));
}
return super.touchDown(event, x, y, pointer, button);
}
如果不知道哪些类实现了
InputListener
,就很难确切地告诉您如何解决问题。然而,在一般意义上,您可能希望在触地
方法中将布尔标志设置为true,在触地
方法中将布尔标志设置为false,然后在某些方法中,每帧调用一次(动作
,绘制
,等等,具体取决于您的实现),您需要更新您的文本
代码看起来像
private boolean flag = false;
@Override
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
if (button == Buttons.LEFT) {
flag = true;
}
//other stuff
return true; //or whatever you want
}
@Override
public boolean touchUp(InputEvent event, float x, float y,
int pointer, int button) {
if (button == Buttons.LEFT) {
flag = false;
}
//other stuff
return false; //or whatever you want
}
@Override
public void act(float delta) {
if (flag) {
double currentValue = Double.parseDouble(Button.getText()
.toString());
if ((int) currentValue != 0)
currentValue--;
Button.updateText(Double.toString(currentValue));
}
//other stuff
}
根据您的目标受众,您可能还需要以某种方式处理指针id(如果用户用两个手指点击标签,然后释放其中一个而不是另一个,则此代码示例不起作用)程序的输出是什么?有错误消息吗?目前它只是冻结,即使我释放鼠标左键。它也不会更新标签。您是否尝试过用if替换while?我需要在按下按钮时更新它,但不确定if是否有助于我。代码是用触地法编写的。如果使用if不起作用,它只会关闭一次,因此,例如,如果设置为100,并按下一个按钮使其下降,它将在触地时下降,在触地时,总共下降2次。