我正在使用滚动窗格在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);`
答案 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);
}