Libgdx scene2dui列大小调整问题

时间:2015-09-17 11:17:20

标签: libgdx scene2d scrollpane

我正在使用滚动窗格在libgdx中创建一个关卡表。这里有特定滚动窗格上具有特定级别的不同表。是否有任何方法可以将特定的表预设为我看到的第一个表,因为如果我的级别超过50,那么它将是愚蠢的,我必须滚动浏览所有这些表以结束特定级别。

关于我的桌子和滚动窗格的简要细节。

我有一个名为列表的表的arraylist,用于在不同的列中存储不同的级别详细信息。然后将此列表添加到另一个名为levleTable的表中。

级别表被添加到滚动窗格中,并添加到主表中。

public void setScrollPane() {
    scrollPane = new ScrollPane(levelTable, getScrollPaneStyle());
    // scrollPane = new ScrollPane(levelTable, skin);
    //scrollPane.setFlickScroll(true);
    scrollPane.setFadeScrollBars(false);
    scrollPane.setScrollingDisabled(false, true);
    scrollPane.setScrollX(300);
    scrollPane.updateVisualScroll();
    //scrollPane.setSmoothScrolling(true);
    mainTable.add(scrollPane).expand();
}

和构造函数`

    mainTable = new Table();
    mainTable.setFillParent(true);
    levelTable = new Table();
    setScrollPane();
    columnTable = new ArrayList<Table>();
    levelSelectionButton = new ArrayList<TextButton>();
    makeLevelMenu();

    //adding main table to stage
    stage.addActor(mainTable);`

1 个答案:

答案 0 :(得分:0)

为了更好的想法(当使用这样的机制时)我将scrollPane自动滚动到当前对象(例如,可能是具有下一级别的表)。

您可以使用以下方式轻松实现:

    scrollPane.setScrollY(y);

y应该是

y = (total height of scroll Pane content) - ( (desired element Y position inside scrollPane) - (element height) )

我的意思是,如果你的scrollPane内容的高度为100px,并且每个高度为20px的5个元素,那么滚动到第三个是:

y = 100 - (3 * 20px - 20px) = 100 - 40px = 60px

如果你的scrollPane是水平排列的,那么同样适用 - 你只需要使用scrollPane.setScrollX(x)并计算所有宽度而不是高度

UPDATE:在使用setScrollX / setScrollY之前,你必须在scrollPane上调用.layout()方法

示例:

    @Override
    public void show() 
    {
        //creating stage and viewport
        viewport = new FillViewport(1280, 800);
        stage = new Stage(viewport);

        Gdx.input.setInputProcessor(stage);

        //creating levelTable
        Table levelTable = new Table();
        levelTable.setSize(2000, 500);

        //filling levelTable with fake actors (it can be labels of your levels numbers)
        for(int i = 0; i < 100; i++)
        {
            Actor a = new Actor();
            a.setSize(80, 200);

            //set debug to see the outline
            a.debug();

            levelTable.add(a).pad(150, 10, 150, 10);
        }

        //set debug to see the outline
        levelTable.debug();

        //defining scroll
        ScrollPane scrollPane = new ScrollPane(levelTable, skin);

        scrollPane.setSize(800, 600); //your custom size
        scrollPane.setPosition(50, 50); //your custom position

        scrollPane.setFadeScrollBars(false);
        scrollPane.setScrollingDisabled(false, true);

        //important!! you have to call it before setScrollX
        scrollPane.layout(); //that's the thing!

        //the number of column you want to go to
        int numberOfColumn = 10;

        //now move to column no numberOfColumn
        scrollPane.setScrollX( levelTable.getWidth() - ( levelTable.getColumns() - numberOfColumn - 1 ) * 100 ); //100, because column width is 100 - actor = 80 + 2 * 10 pad

        //set debug to see the outline
        scrollPane.debug();

        this.stage.addActor(scrollPane);
    }