【问题标题】:LibGDX and ScrollPane with multiple widgets具有多个小部件的 LibGDX 和 ScrollPane
【发布时间】:2013-03-07 05:13:21
【问题描述】:

尝试将多个项目添加到滚动窗格中,我很快发现所有“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);

【问题讨论】:

    标签: java android libgdx


    【解决方案1】:

    如果您想将多个项目放入 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 中设置表格的代码。

    【讨论】:

    • 这没有预期的结果。您正在将滚动条添加到表格中。滚动条仍然只有文本,表格中的其他项目没有滚动。
    • 好的,但这是正确的:我使用“addActor”而不是您正在使用的正确“add”添加到表中。您只需要反转添加:表格进入滚动器,而不是相反。然后,我可能会将其标记为已接受。
    • 为了正确的渲染和边界检查,表格没有paneTable.setFillParent(true); 很重要
    • 我更新了滚动监听器中多个小部件的代码。抱歉,您似乎错过了问题的“关键”部分!傻我:(
    • 这行得通!非常感谢! .....对于读者:别忘了在void render()内拨打stage.act()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2018-09-13
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2023-04-08
    • 2015-02-16
    相关资源
    最近更新 更多