Java 单击鼠标按钮时更新标签的LibGDX

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 ((

我有一个从0到100的浮点值,我想注册一次长时间的点击,然后逐步更新标签,这样标签的文本就会像每0.25秒更新一次一样。目前,我正在使用一个定制标签,该标签有一个更新显示文本的方法。
我试过这样触地得分:

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次。