2013-03-18 4 views
10

Попытка добавить несколько элементов в scrollpane Я быстро обнаружил, что все функции «addActor» не поддерживаются. Итак, я пошел с добавлением таблицы со всеми предметами, которые я хотел (этот код пропускает изображение, которое я все еще хочу добавить), чтобы сделать прокручиваемый экран кредитов ... но этот подход (в настоящее время) не позволяет переполнения, рендеринга ScrollPane бесполезен. (Мой текст отображается только для того, что позволяет высота экрана, и не прокручивается). Как создать прокручиваемую панель с несколькими виджетами в LibGDX? (Я забочусь только о платформах Android и Win/Lin/Mac в данный момент.LibGDX и ScrollPane с несколькими виджетами

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

ответ

18

Если вы хотите поместить несколько элементов в ScrollPane вам просто нужно поместить таблицу в него и вызвать добавить() для каждого виджет вы хотите поместить в ScrollPane

Ниже приведен пример того, как сделать ваши кредиты прокручивать:.

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:. Добавлен код на создание таблицы внутри ScrollPane

+0

Thi s не имеет желаемого результата. Вы добавляете скроллер в таблицу. Скроллер по-прежнему имеет только текст, а остальные элементы в таблице не прокручиваются. – efaj

+0

Хорошо, но это правильно-иш: я добавлял к таблице с помощью «addActor» вместо правильного «добавления», который вы используете. Вам просто нужно инвертировать сложения: таблица входит в скроллер, а не наоборот. Тогда, я, вероятно, сделаю это как принято. – efaj

+4

Для правильной проверки рендеринга и ограничений важно, чтобы в таблице не было 'paneTable.setFillParent (true);' – efaj

Смежные вопросы