android libgdx滚动窗格-不滚动?

wb1gzix0  于 2023-01-15  发布在  Android
关注(0)|答案(5)|浏览(137)

我在一个多人游戏中创建了一个大厅,它可以在一张table上显示任意数量的玩家。

camera = new OrthographicCamera(WIDTH,HEIGHT);
    camera.position.set(WIDTH/2,HEIGHT/2, 0);
    camera.update();

    stage = new Stage();
    Gdx.input.setInputProcessor(stage);
    stage.setCamera(camera);
    stage.setViewport(WIDTH,HEIGHT,false);

    ScrollPaneStyle paneStyle = new ScrollPaneStyle();
    paneStyle.background = new TextureRegionDrawable(WizardsDuel.atlas.findRegion("cavebg"));
    paneStyle.vScrollKnob = new TextureRegionDrawable(WizardsDuel.atlas.findRegion("GUI/slidernob"));
    paneStyle.hScroll = paneStyle.hScrollKnob = paneStyle.vScroll = paneStyle.vScrollKnob;

    Table container = new Table();
    table = new Table();
    ScrollPane pane = new ScrollPane(table,paneStyle);
    container.add(pane).width(WIDTH).height(HEIGHT);
    container.row();
    container.setBounds(0,0,WIDTH,HEIGHT);
    stage.addActor(container);

    font = new BitmapFont();
    color = new Color(0,0,0,1);
    style = new TextButtonStyle();
    style.font = font;
    style.up = new TextureRegionDrawable(WizardsDuel.atlas.findRegion("GUI/guibg"));
    style.fontColor = color;

    handler = new ChangeHandler();
    ArrayList<User> users = FirebaseManager.lobbyUsers;
    for(int i = 0; i < users.size() || i < 100; i++){
        TextButton tmp = new TextButton("",style);
        tmp.scale(2);
        //tmp.setText(users.get(i).name);
        tmp.setText(i+ "   asdf");
        tmp.addListener(handler);
        table.add(tmp).width(WIDTH/4f);
        if(i%2 == 1 && i > 0)
            table.row();
    }

尽管表格明显延伸到屏幕底部(应该是滚动窗格的底部)以下,但没有滚动条,单击和拖动也没有任何作用。
截图:

dced5bon

dced5bon1#

你实际上需要两个东西。一个外部容器和一个内部容器。你经常为此使用两个表。所以这里有一个我如何使用scrollPane的小例子。实际上没有样式,但它应该很清楚。

this.table = new Table();
this.container = new Table();
scroll = new ScrollPane(table);
container.add(scroll).width(500f).height(500f);
container.row();

表格是你添加可滚动内容的表格。容器是外部框。所以你可以在滚动框上添加标题。外部框(容器)需要一个大小。否则你将没有任何滚动条或类似的东西。你需要内部表格。
添加的简单示例:

style = new LabelStyle(font, Color.WHITE);
label = new Label(null, style);
table.add(label);
table.row();
label.setAlignment(1); // align center

给予它更多的行,它可以显示,你会有一个滚动窗格。否则没有滚动条或类似的。
合二为一。我想你只是漏掉了外 Package 。加进去就行了。别忘了设定尺寸。

nzk0hqpo

nzk0hqpo2#

也许你忘了在render()中使用stage act,添加如下内容:

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f));
    stage.draw();
}
6yjfywim

6yjfywim3#

我的问题是它没有接收输入,我不应该在构造函数中设置输入处理器,因为,上一个屏幕在处理器被“隐藏”时将其设置为null,所以当我将该行移到LobbyScreen的show方法时,它发生在上一个屏幕被隐藏之后,并且输入设置正确。

qvk1mo1f

qvk1mo1f4#

在你初始化滚动窗格之后你应该首先调用这个

mScrollPane.layout();
ewm0tg9j

ewm0tg9j5#

2023年|Kotlin

要滚动的元素必须先添加到舞台或组,然后才能传递到ScrollPane

1.创建所需的执行元并将其添加到阶段或组

val actor = Actor()
[Stage/Group].addActor(actor)

1.创建一个滚动窗格并在其中放置一个参与者

val scrollPane = ScrollPane(actor)

1.设置参与者和滚动窗格的位置和尺寸

actor.setBounds(x,y,w,h) | scrollPane.setBounds(x,y,w,h)

PS速度_daN:爱你所做的💚。

相关问题