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 части (горна и долна), но въвеждането не е правилно: за да активирам първия бутон, трябва да натисна горната част на екрана, но долната е „проектирана“ отдолу.

Как мога да създам таблица с панел за превъртане в долната част на екрана?


person user1087543    schedule 31.10.2014    source източник


Отговори (2)


Изглежда има известно неразбиране на прозореца за изглед, таблицата и как да ги използвате:

Използвайте един 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);. Тази таблица ще бъде изчертана под панела за превъртане.

person Lukas    schedule 02.11.2014

БЛАГОДАРЯ ВИ, направих, това е новият ми код:

    // 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);
person user1087543    schedule 03.11.2014