2013-03-18 5 views
10

Próbując dodać wiele elementów do scrollpane, szybko odkryłem, że wszystkie funkcje "addActor" są nieobsługiwane. Więc poszedłem z dodaniem tabeli ze wszystkimi przedmiotami, które chciałem (ten kod pomija obraz, który wciąż chcę dodać), aby utworzyć przewijalny ekran kredytów ... ale to podejście (obecnie) nie pozwala na przepełnienie, renderowanie ScrollPane jest bezużyteczny. (Mój tekst wyświetla się tylko do wysokości ekranu i nie można go przewijać). Jaki jest sposób utworzenia przewijanego panelu z wieloma widżetami w LibGDX? (I tylko dbają o platformach Android i Win/Lin/Mac w tej chwili.LibGDX i ScrollPane z wieloma widżetami

pane = new ScrollPane(null, skin); 
    pane.setFillParent(true); 
    paneContent = new Table(skin); 
    paneContent.setFillParent(true); 
    Label temp = new Label("", skin); 
    temp.setAlignment(Align.left, Align.center); 
    temp.setText(Gdx.files.internal("licenses/credits.txt").readString("UTF-8")); 
    paneContent.addActor(temp); 
    pane.setWidget(paneContent); 
    stage.addActor(pane); 

Odpowiedz

18

Jeśli chcesz umieścić kilka pozycji do ScrollPane wystarczy umieścić stół do niej i nazywają add() dla każdego widget chcesz umieścić w ScrollPane

Poniżej jest przykład jak zrobić swoje kredyty przewijania.

public class ScrollTest implements ApplicationListener { 
    private Stage stage; 

    private static final String reallyLongString = "This\nIs\nA\nReally\nLong\nString\nThat\nHas\nLots\nOf\nLines\nAnd\nRepeats.\n" 
     + "This\nIs\nA\nReally\nLong\nString\nThat\nHas\nLots\nOf\nLines\nAnd\nRepeats.\n" 
     + "This\nIs\nA\nReally\nLong\nString\nThat\nHas\nLots\nOf\nLines\nAnd\nRepeats.\n"; 

    @Override public void create() { 
     this.stage = new Stage(); 
     Gdx.input.setInputProcessor(this.stage); 
     final Skin skin = new Skin(Gdx.files.internal("skin/uiskin.json")); 

     final Label text = new Label(reallyLongString, skin); 
     text.setAlignment(Align.center); 
     text.setWrap(true); 
     final Label text2 = new Label("This is a short string!", skin); 
     text2.setAlignment(Align.center); 
     text2.setWrap(true); 
     final Label text3 = new Label(reallyLongString, skin); 
     text3.setAlignment(Align.center); 
     text3.setWrap(true); 

     final Table scrollTable = new Table(); 
     scrollTable.add(text); 
     scrollTable.row(); 
     scrollTable.add(text2); 
     scrollTable.row(); 
     scrollTable.add(text3); 

     final ScrollPane scroller = new ScrollPane(scrollTable); 

     final Table table = new Table(); 
     table.setFillParent(true); 
     table.add(scroller).fill().expand(); 

     this.stage.addActor(table); 
    } 

    @Override public void render() { 
     this.stage.act(); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
     this.stage.draw(); 
    } 

    @Override public void resize(final int width, final int height) {} 
    @Override public void pause() {} 
    @Override public void resume() {} 
    @Override public void dispose() {} 
} 

Edit. Dodano kod na utworzenie tabeli wewnątrz ScrollPane

+0

Thi s nie ma pożądanego rezultatu. Dodajesz scroller do stołu. W wektorze znajduje się tylko tekst, a pozostałe elementy w tabeli nie przewijają się. – efaj

+0

Dobrze, ale to jest poprawne-ish: dodałem do tabeli z "addActor" zamiast właściwego "add", którego używasz też. Trzeba tylko odwrócić dodatki: Tabela wchodzi do rolki, a nie odwrotnie. Wtedy prawdopodobnie oznaczy to jako zaakceptowane. – efaj

+4

W celu prawidłowego renderowania i sprawdzania ograniczeń ważne jest, aby tabela NIE zawierała parametru 'paneTable.setFillParent (true);' – efaj