Libgdx你能设置ScrollPane的界限吗?

时间:2016-04-19 11:15:26

标签: libgdx

所以最近我发现了Scrollpanes并且一直在尝试实现一个。

经过一番搜索,我找到了这段代码

public void create() {
    batch = new SpriteBatch();
    skin = new Skin(Gdx.files.internal("data/uiskin.json"));
    stage = new Stage();

    gamelog = new Label("Start", skin);
    gamelog.setAlignment(Align.center);
    gamelog.setWrap(true);

    Table scrollTable = new Table();
    scrollTable.add(gamelog);
    scrollTable.row();

    scroller = new ScrollPane(scrollTable);


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

现在大多数情况下这段代码运行良好。实际上创建了一个滚动窗格,我可以动态地向其添加文本。然而我的问题是滚动窗格的大小占据了整个屏幕,初始文本居中在滚动窗格的中间(因此在屏幕中间)并且只有在添加了足够的文本后才开始滚动以占用整个屏幕高度。

而不是自己扩展我真正想要的是滚动窗格只占据屏幕底部的一小部分。

我已经尝试设置表格和滚动窗格的边界但是最接近的只是向下移动滚动窗格(意味着添加的最后一个文字是屏幕外而不是视图。如果它完全忽略任何宽度,则为s或高度设置,只是自己扩展。

我想通过简单地在屏幕底部使用一组标签并动态更改其文本但我们可以获得所需的效果,然后滚动功能将丢失。所以在我这样做之前,我希望有人能够对某些人有所了解,是否有可能调整大小并设置一个滚动界限?

2 个答案:

答案 0 :(得分:1)

表使用单元格来调整其组件的大小。向表中添加组件时,它返回保存该组件的表的单元格。然后,您可以使用单元格来设置组件的大小。

在原始代码中试试这个:

val (\w+) =(?=.*\n.*val \1 = )

如果要在将滚动窗格大小添加到表格后更改滚动窗格大小,可以从表格中获取单元格,然后将其大小设置为:

table.add(scroller).size(460, 200);

这是Cell的API:

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Cell.html

答案 1 :(得分:0)

我偶然发现了一个经过反复试验的解决方案。

以下代码适用于我,并允许调整滚动窗格的大小和位置。主要的罪魁祸首似乎是使用table.setFillParent(true);以及您尝试设置父表边界的顺序。

    batch = new SpriteBatch();
    skin = new Skin(Gdx.files.internal("data/uiskin.json"));
    stage = new Stage();

    gamelog = new Label("Start", skin);
    gamelog.setAlignment(Align.center);
    gamelog.setWrap(true);

    Table scrollTable = new Table();
    scrollTable.add(gamelog);
    scrollTable.row();

    scroller = new ScrollPane(scrollTable);

    Table table = new Table();
    table.setBounds(10, 10, 460, 200);
    table.add(scroller).fill().expand();

    scrollTable.debug();
    scroller.debug();
    table.debug();

    stage.addActor(table);