LibGDX 在一个 table 单元格滚动窗格中绘制多个演员
LibGDX Draw multiple actors in one table cell scroll pane
我目前有一个功能齐全的滚动窗格,如下所示:
只有中间的蓝色框是用滚动面板实现的,所以只有屏幕的中间部分滚动。滚动面板是这样实现的:
final Table scrollTable = new Table();
for (int j = 0; j < 60; j+=3) {
for (int i = j; i < j+3; i++) {
scrollTable.add(items.getValueAt(i).getImage()).center().padRight(80).size(200, 300).padBottom(70);
}
scrollTable.row();
}
final ScrollPane scroller = new ScrollPane(scrollTable);
scroller.setScrollingDisabled(true, false);
final Table table = new Table();
table.setBounds(0, 300, GameWorld.gameWidth, GameWorld.gameHeight - 600);
table.add(scroller);
GameScreen.stage.addActor(table);
我遇到的问题是每个框都绘制在 table 中的一个单元格中(我相信),我需要做的是使用字体(也可能是纹理)绘制级别数在框的顶部像这样:
问题是我不能简单地在屏幕顶部绘图,因为当用户向下滚动 table 时字体将是静态的,所以我需要将字体添加到 table 所以它随 table 滚动,但每次我尝试添加它时,它只能作为一个单独的单元格添加,而不能添加到已绘制的单元格之上。
有没有一种方法可以在另一个单元格之上绘制一个单元格,这样我就可以在一个单元格中绘制我的字体并将其放在关卡框纹理上?或者对于这个问题有更好的解决方案吗?
我想通了,您可以在纹理下方的新行中添加标签,然后使用 table.add(texture).padTop(-200)
将其调到第一行。我画了 3 行,第一行是方框,第二行是级别编号,第三行是在该级别达到的星星数,并使用 .padTop()
将最后两行放在第一行之上以使其成为看起来都是一排。
最终结果:
代码(大致)如下:
for (int j = 0; j < LevelFiles.maxLvl; j += 3) {
//Level Boxes
for (int i = j; i < j + 3; i++) {
if(i == j)scrollTable.add(levelBoxes.getValueAt(i).getImage()).center().size(200, 300).padBottom(70);
if(i == j+1)scrollTable.add(levelBoxes.getValueAt(i).getImage()).center().size(200, 300).pad(0, 100, 0, 100).padBottom(70);
if(i == j+2)scrollTable.add(levelBoxes.getValueAt(i).getImage()).center().size(200, 300).padBottom(70);
}
scrollTable.row();
//Fonts
for (int i = j; i < j + 3; i++) {
scrollTable.add(new Label(i+1 + "", l)).padTop(-450);
}
scrollTable.row();
//Stars
for (int i = j; i < j + 3; i++) {
if((i+1) <= LevelFiles.maxLvl){
scrollTable.add(threeStars[i]).prefHeight(100).prefWidth(262).padRight(0).padTop(-200);
}
}
scrollTable.row();
}
我目前有一个功能齐全的滚动窗格,如下所示:
只有中间的蓝色框是用滚动面板实现的,所以只有屏幕的中间部分滚动。滚动面板是这样实现的:
final Table scrollTable = new Table();
for (int j = 0; j < 60; j+=3) {
for (int i = j; i < j+3; i++) {
scrollTable.add(items.getValueAt(i).getImage()).center().padRight(80).size(200, 300).padBottom(70);
}
scrollTable.row();
}
final ScrollPane scroller = new ScrollPane(scrollTable);
scroller.setScrollingDisabled(true, false);
final Table table = new Table();
table.setBounds(0, 300, GameWorld.gameWidth, GameWorld.gameHeight - 600);
table.add(scroller);
GameScreen.stage.addActor(table);
我遇到的问题是每个框都绘制在 table 中的一个单元格中(我相信),我需要做的是使用字体(也可能是纹理)绘制级别数在框的顶部像这样:
问题是我不能简单地在屏幕顶部绘图,因为当用户向下滚动 table 时字体将是静态的,所以我需要将字体添加到 table 所以它随 table 滚动,但每次我尝试添加它时,它只能作为一个单独的单元格添加,而不能添加到已绘制的单元格之上。
有没有一种方法可以在另一个单元格之上绘制一个单元格,这样我就可以在一个单元格中绘制我的字体并将其放在关卡框纹理上?或者对于这个问题有更好的解决方案吗?
我想通了,您可以在纹理下方的新行中添加标签,然后使用 table.add(texture).padTop(-200)
将其调到第一行。我画了 3 行,第一行是方框,第二行是级别编号,第三行是在该级别达到的星星数,并使用 .padTop()
将最后两行放在第一行之上以使其成为看起来都是一排。
最终结果:
代码(大致)如下:
for (int j = 0; j < LevelFiles.maxLvl; j += 3) {
//Level Boxes
for (int i = j; i < j + 3; i++) {
if(i == j)scrollTable.add(levelBoxes.getValueAt(i).getImage()).center().size(200, 300).padBottom(70);
if(i == j+1)scrollTable.add(levelBoxes.getValueAt(i).getImage()).center().size(200, 300).pad(0, 100, 0, 100).padBottom(70);
if(i == j+2)scrollTable.add(levelBoxes.getValueAt(i).getImage()).center().size(200, 300).padBottom(70);
}
scrollTable.row();
//Fonts
for (int i = j; i < j + 3; i++) {
scrollTable.add(new Label(i+1 + "", l)).padTop(-450);
}
scrollTable.row();
//Stars
for (int i = j; i < j + 3; i++) {
if((i+1) <= LevelFiles.maxLvl){
scrollTable.add(threeStars[i]).prefHeight(100).prefWidth(262).padRight(0).padTop(-200);
}
}
scrollTable.row();
}