libGDX ScrollPane与WidgetGroup而不是Table作为ScrollPane小部件?

时间:2016-03-29 15:44:14

标签: libgdx widget scrollpane

根据我的理解,ScrollPane可以通过使用Table作为ScrollPane小部件来添加多个小部件(这是在libGDX repo中的ScrollPane测试中完成的方式)。

我希望实现类似的功能,但希望在ScrollPane小部件中拥有绝对定位的多个actor,而不是使用Table作为ScrollPane小部件提供的表格定位。

我最终得到的代码不起作用,但根据libGDX javadoc它应该,我不知道它为什么不起作用!

stage = getStage();

// Scroll pane outer container
Container<ScrollPane> container = new Container<ScrollPane>();
container.setSize(Game.getWidth(), Game.getHeight());

// Scroll pane inner container
WidgetGroup widgetGroup = new WidgetGroup();
widgetGroup.setFillParent(true);
widgetGroup.addActor(new Image(MAP_TEXTURE_ATLAS.findRegion("map")));

// Scroll pane
ScrollPane scrollPane = new ScrollPane(widgetGroup);
container.setActor(scrollPane);

stage.addActor(container);

屏幕上根本没有显示任何内容;

但它确实可以使用下面的代码(这显然不是我想要的,因为ScrollPane小部件是一个只能有一个actor的Container)

// Scroll pane outer container
Container<ScrollPane> container = new Container<ScrollPane>();
container.setSize(Match3.getWidth(), Match3.getHeight());

// Scroll pane inner container
Container container2 = new Container();
container2.setBackground(new TextureRegionDrawable(MAP_TEXTURE_ATLAS.findRegion("map")));

// Scroll pane
ScrollPane scrollPane = new ScrollPane(container2);
container.setActor(scrollPane);

stage.addActor(container);

有没有办法将WidgetGroup与ScrollPane一起使用,或者我如何能够实现我需要的功能。

由于

接受答复的替代实施

在阅读了接受的答案后,我决定创建自己的课程,实现如下;

// Scroll pane outer container
Container<ScrollPane> container = new Container<ScrollPane>();
container.setSize(Match3.getWidth(), Match3.getHeight());

class ScrollWidget extends WidgetGroup {

  private float prefHeight;
  private float prefWidth;

  public ScrollWidget(Image image) {

    prefHeight = image.getHeight();
    prefWidth = image.getWidth();

    addActor(image);
  }

  @Override
  public float getPrefHeight() {

    return prefHeight;
  }

  @Override
  public float getPrefWidth() {

    return prefWidth;
  }
}

ScrollWidget scrollWidget = new ScrollWidget(
    new Image(MAP_TEXTURE_ATLAS.findRegion("map"))
);

// Scroll pane
ScrollPane scrollPane = new ScrollPane(scrollWidget);
scrollPane.setOverscroll(false, false);

scrollPane.layout();
scrollPane.updateVisualScroll();
scrollPane.setScrollY(scrollPane.getMaxY());

container.setActor(scrollPane);

stage.addActor(container);

1 个答案:

答案 0 :(得分:0)

使用WidgetGroup时,您必须自己设置尺寸。 Image actor不知道首选的宽度/高度应该是什么,默认为0。

未经测试的代码,但我自己也使用类似的东西:

Stage stage = new Stage();
WidgetGroup group = new WidgetGroup();
Scrollpane scrollPane = new ScrollPane(group);
scrollpane.setBounds(0,0,screenWidth,screenHeight);
group.setBounds(0,0,totalWidth,totalHeight);
Image image = new Image(texture);
image.setBounds(0,0,imageWidth,imageHeight);
group.addActor(image);
stage.addActor(scrollPane);