【问题标题】:libgdx ScrollPane - Doesn't scroll?libgdx ScrollPane - 不滚动?
【发布时间】:2013-08-01 14:41:10
【问题描述】:

我正在制作一个多人游戏的大厅,它可能会在一张桌子上显示任意数量的玩家。我有以下代码:

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();
    }

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

截图:

【问题讨论】:

    标签: java android libgdx scrollpane


    【解决方案1】:

    也许你忘记在 render() 中设置舞台动作,添加如下内容:

    @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();
    }
    

    【讨论】:

      【解决方案2】:

      你确实需要两件事。一个外容器和一个内容器。您确实经常为此使用两个表。所以这里是一个我如何使用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
      

      给它更多可以显示的行,你就会有一个滚动窗格。否则没有滚动条之类的。


      一体。你只是错过了我认为的外部容器。添加它,它应该可以工作。不要忘记设置尺寸。

      【讨论】:

      • 另外,您从哪里获得 Config.VIRTUAL_VIEW_WIDTH?
      • ...这是我在程序中使用的静态浮点数。用一些值替换它
      • 我做到了,我使用了一个名为 WIDTH 的静态字段。我将编辑我的帖子以显示容器
      • 我会添加截图。
      • 您是否尝试向下滚动? jsut按住鼠标..也许只是样式不起作用。我认为其余的看起来都不错
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

            mScrollPane.layout();
        

        【讨论】:

          猜你喜欢
          • 2015-08-14
          • 2016-09-02
          • 1970-01-01
          • 1970-01-01
          • 2019-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-03
          相关资源
          最近更新 更多