2014-10-31 2 views
2

Я пытаюсь добавить в свою игру меньшее скользящее меню (влево и вправо) в нижней части экрана. Моя проблема заключается в том, что я не могу настроить таблицу в нижней части экрана, это мой код:JAVA-LIBGDX Как правильно настроить scrollPane

private void initUI() { 
    // inizializzazione dello stage 
    stage = new Stage(new ExtendViewport(Gdx.graphics.getWidth(),Gdx.graphics.getHeight()/4)); 
    Skin skin = new Skin(Gdx.files.internal("ui/uiskin.json")); 
    Gdx.input.setInputProcessor(stage); 

    // inizializzazione della tabella 
    container = new Table(); 
    container.setFillParent(true); 
    stage.addActor(container); 

    Table table = new Table(); 
    table.debug(); 

    final ScrollPane scroll = new ScrollPane(table, skin); 
    scroll.setFillParent(true); 

    InputListener stopTouchDown = new InputListener() { 
    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { 
     event.stop(); 
     return false; 
    }   
    }; 

    table.pad(20).defaults().expandY().space(5); 

    for (int i = 0; i < 15; i++) { 

    table.row(); 
    TextButton button = new TextButton(i + "dos", skin); 
    table.add(button); 
    button.addListener(new ClickListener() { 
     public void clicked (InputEvent event, float x, float y) { 
      System.out.println("click " + x + ", " + y); 
     } 
    }); 
    }  

    container.add(scroll).expandY().fill().colspan(1); 
    container.row().space(10).padBottom(10); 

}

render(){ 
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight()/4); 
    Gdx.input.setInputProcessor(stage); 
    stage.draw(); 
    stage.act(Gdx.graphics.getDeltaTime()); 
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

}

Таким образом, я могу разделить экран на 2 части (сверху и снизу), но вход неправильный: чтобы активировать первую кнопку, я должен нажать верхнюю часть экрана, но нижняя часть «конструирована».

Как я могу создать таблицу с прокруткой в ​​нижней части экрана?

ответ

3

Там, кажется, некоторое недопонимание видового экрана, таблицы и как их использовать:

Используйте один Viewport для вашего рендеринга общий экран. Разделите экран вверх, используя Table. Поэтому изменить первую строку в initUI к

stage = new Stage(new ExtendViewport(Gdx.graphics.getWidth(),Gdx.graphics.getHeight())); (удалить/4)

и настроить метод отрисовки на что-то вроде:

@Override 
public void render(float delta) { 
     Gdx.gl.glClearColor(0, 0, 0, 0); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20. 
     stage.act(delta); 
     stage.draw(); 
} 

Ясного вашего буфера цвета, чтобы убедиться, что анимация, или операции нажатия кнопок правильно рисуются. Не устанавливайте stage как InputProcessor каждый вызов кадра. Как только это делается в initUI, все в порядке.

К размеру таблицы: Я предполагаю, что таблица не соответствует содержащим элементам. Поэтому каждый раз, когда вы добавляете кнопку с table.add(button), добавьте информацию о ее высоте и ширине с помощью table.add(button).height(...).width(...). Затем таблица и соответствующая панель прокрутки будут скорректированы вправо.

В настоящее время я вижу только, что container содержит объект scroll, который заполняет его родительский элемент, который заполняет весь экран. Поэтому не забудьте добавить следующую таблицу в контейнер после добавления scroll в container после container.row().space(10).padBottom(10);. Эта таблица будет показана ниже области прокрутки.

0

СПАСИБО, я сделал, это мой новый код:

// inizializzazione dello stage 
    stage = new Stage(new ExtendViewport(Constants.VIEWPORT_GUI_WIDTH,Constants.VIEWPORT_GUI_HEIGHT/4)); 
    Skin skin = new Skin(Gdx.files.internal("ui/uiskin.json")); 
    Gdx.input.setInputProcessor(stage); 

    // inizializzazione della tabella 
    container = new Table(); 
    container.setFillParent(true); 
    container.bottom(); 
    stage.addActor(container); 

    Table table = new Table(); 
    table.debug(); 
    table.bottom(); 

    final ScrollPane scroll = new ScrollPane(table, skin); 
    //scroll.setFillParent(true); 
    scroll.setupFadeScrollBars(0f, 0f); 

    InputListener stopTouchDown = new InputListener() { 
     public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { 
      event.stop(); 
      return false; 
     }   
    }; 

    table.pad(20).defaults().space(5); 

    for (int i = 0; i < 15; i++) { 
     TextButton button = new TextButton(i + "dos", skin); 
     table.add(button).height(scroll.getHeight()).width(Constants.VIEWPORT_GUI_WIDTH/8); 
     button.addListener(new ClickListener() { 
      public void clicked (InputEvent event, float x, float y) { 
       System.out.println("click " + x + ", " + y); 
      } 
     }); 
    }  
    container.bottom(); 
    container.add(scroll).height(Gdx.graphics.getHeight()/3);//.expandY().fill().colspan(1); 
    container.row().space(10).padBottom(10); 
Смежные вопросы