2016-03-29 4 views
2

Aus meiner Sicht kann ein ScrollPane mehrere Widgets hinzufügen, indem eine Tabelle als ScrollPane-Widget verwendet wird (so wird es in den ScrollPane-Tests innerhalb des libGDX-Repo durchgeführt).libGDX ScrollPane mit WidgetGroup anstelle von Table als ScrollPane Widget?

Ich möchte etwas Ähnliches erreichen, möchte aber die absolute Positionierung vieler Akteure innerhalb des ScrollPane-Widgets im Gegensatz zur Tabellenpositionierung, die durch Verwendung einer Tabelle als ScrollPane-Widget bereitgestellt wird.

Ich endete mit diesem Code, der nicht funktioniert, aber nach dem libGDX javadoc sollte es und ich weiß nicht, warum es nicht funktioniert!

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

Nichts wird auf dem Bildschirm überhaupt angezeigt;

Es ist jedoch mit dem folgenden Code funktioniert (was natürlich nicht das, was ich will als ScrollPane-Widget ist ein Container, die nur einen Schauspieler haben haben können)

// 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); 

Gibt es eine Möglichkeit, mit verwenden WidgetGroup ScrollPane, oder wie ich die von mir benötigte Funktionalität erreichen kann.

Dank

ALTERNATIVE UMSETZUNG DER ANTWORT AKZEPTIERT

Nachdem die akzeptierte Antwort Lesen ich beschlossen, meine eigene Klasse zu erstellen, die Umsetzung ist unten;

// 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); 

Antwort

0

Wenn Sie mit einer WidgetGroup arbeiten, müssen Sie die Größe selbst festlegen. Der Bild Schauspieler hat keine Ahnung von dem, was Breite bevorzugt/Höhe sein sollte und auf 0

ungetesteten Code ausfällt, aber ich etwas ähnliches selbst:

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); 
+0

Dank, das war das Problem! Ich habe meine Frage so bearbeitet, dass sie eine ähnliche Lösung enthält, wie Sie sie gelöst haben. – GradeRetro