LibGDX和带有多个小部件的ScrollPane

12

尝试在滚动窗格中添加多个项目时,我很快发现所有的 "addActor" 函数都不支持。所以,我选择添加一个表格,并将我想要的所有项目(这段代码缺少我仍然想要添加的图像)添加到可滚动的信用屏幕中... 但是这种方法(目前)不允许溢出,导致ScrollPane无用。(我的文本只显示屏幕高度允许的部分,而不能滚动)。 如何在LibGDX中使用多个小部件创建可滚动窗格?(目前我只关心Android和Win / Lin / Mac平台。)

    pane = new ScrollPane(null, skin);
    pane.setFillParent(true);
    paneContent = new Table(skin);
    paneContent.setFillParent(true);
    Label temp = new Label("", skin);
    temp.setAlignment(Align.left, Align.center);
    temp.setText( Gdx.files.internal("licenses/credits.txt").readString("UTF-8") );
    paneContent.addActor(temp);
    pane.setWidget(paneContent);
    stage.addActor(pane);
1个回答

21

如果您想将多个项目放入ScrollPane中,只需将一个表格放入其中,并为要放入ScrollPane中的每个小部件调用add()。

下面是一个示例,介绍如何使您的学分可滚动:

public class ScrollTest implements ApplicationListener {
    private Stage stage;

    private static final String reallyLongString = "This\nIs\nA\nReally\nLong\nString\nThat\nHas\nLots\nOf\nLines\nAnd\nRepeats.\n"
        + "This\nIs\nA\nReally\nLong\nString\nThat\nHas\nLots\nOf\nLines\nAnd\nRepeats.\n"
        + "This\nIs\nA\nReally\nLong\nString\nThat\nHas\nLots\nOf\nLines\nAnd\nRepeats.\n";

    @Override public void create() {
        this.stage = new Stage();
        Gdx.input.setInputProcessor(this.stage);
        final Skin skin = new Skin(Gdx.files.internal("skin/uiskin.json"));

        final Label text = new Label(reallyLongString, skin);
        text.setAlignment(Align.center);
        text.setWrap(true);
        final Label text2 = new Label("This is a short string!", skin);
        text2.setAlignment(Align.center);
        text2.setWrap(true);
        final Label text3 = new Label(reallyLongString, skin);
        text3.setAlignment(Align.center);
        text3.setWrap(true);

        final Table scrollTable = new Table();
        scrollTable.add(text);
        scrollTable.row();
        scrollTable.add(text2);
        scrollTable.row();
        scrollTable.add(text3);

        final ScrollPane scroller = new ScrollPane(scrollTable);

        final Table table = new Table();
        table.setFillParent(true);
        table.add(scroller).fill().expand();

        this.stage.addActor(table);
    }

    @Override public void render() {
        this.stage.act();
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        this.stage.draw();
    }

    @Override public void resize(final int width, final int height) {}
    @Override public void pause() {}
    @Override public void resume() {}
    @Override public void dispose() {}
}

编辑:添加了有关在ScrollPane内设置表格的代码。


这并没有达到预期的结果。你把滚动条添加到了表格中,但是滚动条仍然只包含文本,而表格中的其他项目并没有滚动。 - efaj
好的,但这大概是正确的:我使用了“addActor”来添加表格,而不是你正在使用的正确的“add”。你只需要反转添加的顺序:表格放在滚动条里面,而不是相反。然后,我可能会将其标记为已接受。 - efaj
4
为了正确渲染和边界检查,重要的是表格不要有 paneTable.setFillParent(true); - efaj
1
我在滚动监听器中更新了多个小部件的代码。抱歉,似乎错过了你问题中的“关键”部分!我真是太傻了 :( - Jyro117
1
这个可行!非常感谢!......对于读者:只是不要忘记在void render()内调用stage.act() - topher
我是否理解错了什么,我的表格(比屏幕大)无法滚动!无论是在触摸屏上还是在桌面上都不行,没有滚动条,也不能通过拖放来滚动。该怎么办?- 好的,问题已解决:我忘记在show()方法中添加Gdx.input.setInputProcessor(stage);。 - Suisse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接