【问题标题】:LibGDX updating a label while a mouse button is being clickedLibGDX 在单击鼠标按钮时更新标签
【发布时间】:2014-07-01 16:08:41
【问题描述】:

我有一个从 0 到 100 的浮点值,我想注册一个长按并逐步更新 Label,这样标签的文本就会每 0.25 秒更新一次。现在我正在使用一个定制的标签,它有一种方法来更新显示的文本。
我尝试像这样使用 touchDown:

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);
        }

【问题讨论】:

  • 你的程序的输出是什么?有错误信息吗?
  • 目前它只是冻结,即使我正在释放鼠标左键。它也不会更新标签。
  • 你试过用 if 代替 while 吗?
  • 我需要在按下按钮时更新它,不确定是否可以帮助我。代码写在 touchDown 方法中。
  • 使用if不起作用,它只是取下一个,所以如果例如设置为100,然后按一个按钮使其下降,它会在触摸下降时取下,并且在修饰时,总共会减少 2 个。

标签: java libgdx label


【解决方案1】:

在不知道您的哪些类实现了您的InputListener 的情况下,很难确切地告诉您如何解决您的问题。但是,一般而言,您可能想要做的是在您的 touchDown 方法上设置一个布尔标志为 true,在您的 touchUp 方法上设置为 false,然后在每帧调用的某个方法中 (@987654324 @、draw 等,具体取决于你的实现),你会想要更新你的文本。

代码看起来像

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(如果用户用两根手指单击标签,然后释放一个但不释放另一个,则此代码示例将不起作用)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 2013-06-30
    • 2017-07-20
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多