java - libgdx 同时更新标签文本和位置

标签 java android libgdx slider label

我想做的是添加一个标签来跟随 slider 旋钮并显示旋钮的值。我目前有一个垂直 slider 和一个堆叠在表格单元格内的标签。我能够将标签定位到旋钮所在的位置并正确更新其文本,但在移动旋钮时遇到问题。

当我移动旋钮时,只要我不更新文本,我就可以使标签跟随它。但是,如果我更新文本,则标签会在单元格中重新居中,直到旋钮停止移动,此时它将自身放置在旋钮上。

如何使标签在更新文本时不会重新定位?

这是我正在做的一些示例代码:

public class OptionsWindow implements Screen {
    private Stage stage;
    private Table table;
    private Slider slider;
    private Label label;

    private Skin textSkin = new Skin(Gdx.files.internal("skins/skin.json"),
        new TextureAtlas(Gdx.files.internal("skins/text.pack")));
    private Skin sliderSkin = new Skin(Gdx.files.internal("skins/skin.json"),
        new TextureAtlas(Gdx.files.internal("skins/text.pack")));

    private min = 1, max = 2;

    @Override
    public void show() {
        stage = new Stage();
        table = new Table();
        slider = new Slider(min, max, 0.001f, true, sliderSkin);
        label = new Label(""), textSkin);

        table.stack(label, slider).height(1000);
        table.setFillParent(true);
        stage.addActor(table);

        Gdx.input.setInputProcessor(stage);
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        label.setY(slider.getValue() - min);
        label.setText(slider.getValue());

        stage.act();
        stage.draw();
    }
}

我已经做了很多搜索来寻找这个问题的答案,但没有得到任何结果。我还尝试将标签放入容器中并在更改标签文本时移动容器,但发生了相同的结果。我确信以前有人这样做过。这似乎是人们想要的东西。请,欢迎任何帮助。

最佳答案

以前从未这样做过,我总是在 slider 旁边或上方的标签中显示金额以提供反馈。但你所追求的结果给人一种很好的感觉。您是否尝试向 slider 添加 ChangeListener ?每次 slider 改变时都会调用它。因此,如果您在其中插入新位置和文本,它应该会正确更新。

        //Slider has to be "final" for the listener.
        final Slider slider = new Slider(0, 10, 1, true, skin);
        slider.addListener(new ChangeListener() {
            @Override
            public void changed(ChangeEvent event, Actor actor) {
                label.setY(slider.getValue() - min);
                label.setText(slider.getValue());
            }
        });

这不需要出现在您的渲染方法中。它是一个监听器,因此每当发生某些事情时,监听器就会执行监听。

关于java - libgdx 同时更新标签文本和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31641969/

相关文章:

android:如何在ListView中通过edittext(searchbar)搜索行

java - 切换屏幕 (libgdx) - 实现 ApplicationListener 的游戏类

java - Android.LibGDX。 3d 粒子系统不工作(广告牌)

java - Box2D ChainShape 顶点计数=0

java - 为什么在 Kotlin 中 Room 的 @Database 获取实体为 arrayOf,而 Java 不获取数组?

java - Sockets编程中SOCKS、DIRECT和HTTP的区别

安卓开发细节

java - 具有多个用例的onOff开关的SharedPreferences

java - 选择应加载项目的哪个可运行类

java - MapStruct @MappingTarget 生成一个空方法