【问题标题】:LibGDX ScrollPane doesn't draw ImageButtonLibGDX ScrollPane 不绘制 ImageButton
【发布时间】:2017-03-21 07:47:21
【问题描述】:

我对 LibGDX API 有点陌生,我试图在表格中组织标签和 ImageButtons(以及这些表格中的表格)。当我运行应用程序时,ImageButtons 没有被绘制到屏幕上。

我到处搜索,但找不到答案,所以非常感谢帮助。

编辑:这可能是因为我在表格中使用表格,但我没有找到任何关于嵌套表格的信息,或者说实话。

我在 render 中调用了一个方法来保持标签文本的变化,如下所示:

public void drawTable(){
    final Table scrollTable = new Table();
    scrollTable.addActor(canbtn);
    scrollTable.row();
    //other buttons

    Label.LabelStyle style = new Label.LabelStyle(font, Color.WHITE);
    Label.LabelStyle style2 = new Label.LabelStyle(font2, Color.WHITE);

    CustomLabel amtLabel = new CustomLabel("" + (int)(game.tot.getSum()), style);
    CustomLabel mizcoins = new CustomLabel("Mizcoins", style2);
    CustomLabel mpsCount = new CustomLabel(game.totMPS + " MPS", style2);

    PerSec can = game.boosts.get("Can").getPerSec();

    Table t = new Table();
    t.add(drawer(can, canbtn));
    t.row();
    scroller = new ScrollPane(t);

    table = new Table(); //the container table
    table.setFillParent(true);
    table.add(amtLabel).padTop(50);
    table.row();
    table.add(mizcoins);
    table.row();
    table.add(mpsCount);
    table.row();
    table.add(scroller).fill().expand();//.space(350).padBottom(10);
}

还有drawer()函数:

public Table drawer(PerSec perSec, ImageButton imgbtn){
    Label.LabelStyle style = new Label.LabelStyle(font2, Color.WHITE);
    Label.LabelStyle style2 = new Label.LabelStyle(font2, Color.WHITE);
    Label.LabelStyle style3 = new Label.LabelStyle(font2, Color.RED);

    CustomLabel nameLabel = new CustomLabel(perSec.getType(), style);
    CustomLabel priceLabel = new CustomLabel("Price: " + perSec.getPrice(), style2);
    CustomLabel addsLabel = new CustomLabel("Adds: " + perSec.getDefAddPerSec(), style2);
    CustomLabel youHaveLabel = new CustomLabel("You Have: " + perSec.getAmt(), style3);

    Table mainTable = new Table();
    Table smallTable = new Table();

    smallTable.add(priceLabel);
    smallTable.row();
    smallTable.add(youHaveLabel);

    mainTable.add(nameLabel);
    mainTable.add(imgbtn);
    mainTable.row();
    mainTable.add(smallTable);
    mainTable.add(addsLabel);

    return mainTable;

}

【问题讨论】:

  • 弹出的一些内容是:您首先在 canbtn 上执行“addActor”,然后在“drawer()”中将其添加到其他内容中。这推翻了之前的 add 调用,因为一个 actor 只能有 1 个父级。另外 add 和 addActor 的工作方式也不同。 addActor 仅将其作为子项放置。而 add() 创建一个表格单元格,将其添加到其中。使其使用表格的对齐功能。问题可能是:覆盖添加,将其添加到错误的表中。或者添加它的大小为 0。
  • 我不太明白你的目的,因为我认为我坚持自己的想法。我将粘贴一个链接,向您展示我的设计目的:imgur.com/a/tpVnZ

标签: android libgdx imagebutton scrollpane


【解决方案1】:

一些伪代码向您展示我将如何创建这样一个表(如您评论中的图片中所述)

private void setupScrollPane()
{
    ScrollPane pane = new ScrollPane(generatePanels());
    pane.setBounds(0,0,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
    stage.addActor(pane);
}

private Table generatePanels()
{
    Table list = new Table();
    for(int i=0;i<2;i++)
    {
        list.add(genetePanel()).row();
    }
    return list;
}

private Table genetePanel()
{
    Table root = new Table();
    root.setSize(400,200);

    Table left = new Table();
    Table middle = new Table();
    Table right = new Table();

    left.add().growY().row();       //an empty row for padding
    left.add(new Label("Price label")).row();
    left.add(new Label("you have label")).row();
    left.add().growY().row();       //an empty row for padding

    middle.add(new Label("Name label")).row();
    middle.add().growY().row(); //an empty row for padding

    right.add(new ImageButton()).row();
    right.add(new Label("Adds label")).row();

    root.add(left).growX();
    root.add(middle).growX();
    root.add(right).growX();
}

【讨论】:

  • 嘿!首先,非常感谢。现在,我已经测试了您的代码,每次加载屏幕时都会将第一个列表的副本添加到屏幕上,所以基本上在第一次加载时我有 2 个项目,然后是第二个 4,然后是 6,然后是 8 等等关于...您如何克服这一点,以及如何更新它,以便在单击 ImageButton 时“您拥有”和“价格”标签发生变化?非常感谢,再次...
  • 在构造函数或设置函数中设置屏幕。如果你真的想在 show() 中做。保留一个布尔值,检查它是否已经设置。如果需要,您可以在 dispose 中取消设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 2015-01-27
  • 2019-08-04
  • 1970-01-01
相关资源
最近更新 更多