2016-03-29 19 views
2

Bir ScrollPane öğesinin, ScrollPane küçük aracı olarak bir Tablo kullanarak buna eklenmiş çoklu parçacıklara sahip olabileceğini anlıyorum (bu, libGDX repo içindeki ScrollPane testlerinde böyle yapılır).libGDX ScrollPane widget'ı olarak Tablo yerine WidgetGroup ile ScrollPane?

Benzer bir şey elde etmek isterim ancak ScrollPane küçük aracı içinde ScrollPane küçük aracı olarak bir Tablo kullanılarak sağlanan tablo konumlandırmasının aksine birçok aktörün mutlak konumlandırılmasını isterim.

İşe yaramayan bu kodla bitti, fakat libGDX javadoc'a göre, neden çalışmıyor ve neden çalışmıyor?

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

Hiçbir şey ekranda hiç bir şey görüntülenmiyor;

Ancak aşağıda kodu ile çalışır

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

ile WidgetGroup kullanmak için bir yolu var mı (ben ScrollPane widget olarak ne istediğini açıkça olmadığı tek aktör olabilir bir Konteyner olan) ScrollPane veya gereksinim duyduğum işlevselliği nasıl elde edebileceğimin herhangi bir yolu.

Teşekkür

Kendi sınıf oluşturmak için karar kabul cevabı okuduktan sonra KABUL CEVAP

ALTERNATİF UYGULAMA, uygulama altındadır;

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

cevap

0

Bir WidgetGroup ile çalışırken boyutları kendiniz ayarlamanız gerekir. Görüntü aktör genişliğini tercih ne hiçbir fikri yok/yükseklikleri kendim olmalı ve 0.

denenmemiş kod varsayılan olacaktır, ama benzer bir şey kullanın:

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

sayesinde bu sorun oldu! Sorumu, nasıl çözdüğünüze benzer bir çözüm eklemem için düzenledim. – GradeRetro