2014-12-20 2 views
2

Я создаю магазин для своей игры, и у меня возникают проблемы с libgdx ScrollPane. Кажется, он перемещает таблицу внутри нее на 155 пикселей. Эффект, который у него есть, заключается в том, что таблица выглядит примерно на 155 пикселей вниз, а последняя кнопка выключена с экрана, независимо от того, как далеко вниз я прокручиваю.Libgdx ScrollPane добавление пространства вверху

Это окно, когда появляется «Магазин».

Top of the scroll pane Как вы можете видеть, верхняя часть таблицы находится немного ниже верхней части окна. Код ниже, но таблица имеет только 10px отступов.

Вот окно, когда я прокручивался, насколько мог, извините, парсы прокрутки исчезли, прежде чем я смог захватить скриншот.

Bottom of the scroll pane Вы можете видеть, что кнопка «Главное меню» находится примерно на полпути от экрана.

Вот код, который выдает «Магазин».

table = new Table(); 
table.setFillParent(true); 
table.defaults().expandX().fill().space(5f); 
table.pad(10f); 

// characters 
table.add(new Label("Characters: ", skin, "default")).left().colspan(2); 
table.row(); 
ButtonGroup characterGroup = new ButtonGroup(); 
characterGroup.setMaxCheckCount(1); 
Button boyButton = createImageTextButton("Plain Boy", boyTexture); 
Button catButton = createImageTextButton("Cat Girl", catTexture); 
Button hornButton = createImageTextButton("Horn Girl", hornTexture); 
Button pinkButton = createImageTextButton("Pink Girl", pinkTexture); 
Button queenButton = createImageTextButton("Queen", queenTexture); 
float minHeight = 130f; // only used to force scrolling. 
table.add(boyButton).minHeight(minHeight); 
table.add(catButton).minHeight(minHeight).row(); 
table.add(hornButton).minHeight(minHeight); 
table.add(pinkButton).minHeight(minHeight).row(); 
table.add(queenButton).minHeight(minHeight).colspan(2); 
table.row(); 
characterGroup.add(boyButton, catButton, hornButton, pinkButton, queenButton); 
characterGroup.setChecked("Plain Boy"); 

// drills 
ButtonGroup drillGroup = new ButtonGroup(); 
Button flappyButton = createImageTextButton("Flappy", null); 
Button tappyButton = createImageTextButton("Tappy", null); 
Button tiltyButton = createImageTextButton("Tilty", null); 
table.add(new Label("Drills:", skin, "default")).left().padTop(20).colspan(2); 
table.row(); 
table.add(flappyButton).minHeight(minHeight); 
table.add(tappyButton).minHeight(minHeight).row(); 
table.add(tiltyButton).minHeight(minHeight); 
drillGroup.add(flappyButton, tappyButton, tiltyButton); 
drillGroup.setChecked("Flappy"); 

// main menu button 
table.row(); 
Button mainMenuButton = createImageTextButton("Main Menu", null); 
table.add(mainMenuButton).minHeight(minHeight).padTop(40).padBottom(10f).colspan(2); 

ScrollPane scrollPane = new ScrollPane(table, skin); 
scrollPane.setBounds(0, 0, stage.getWidth(), stage.getHeight()); 
addActor(scrollPane); 

Я отлажена настольная версия и увидел, что y положения стола было установлено на -155, прежде чем я перечисляю, и значение 0 после того, как перейти к нижней части. Однако, даже когда он установлен в 0, последняя кнопка всегда отрывается от экрана.

В соответствии с просьбой здесь код, где я создаю окно просмотра и камеры:

package com.example; 

import com.badlogic.gdx.ApplicationAdapter; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.scenes.scene2d.Stage; 
import com.badlogic.gdx.scenes.scene2d.ui.Skin; 
import com.badlogic.gdx.utils.viewport.ExtendViewport; 
import com.badlogic.gdx.utils.viewport.Viewport; 
import com.example.stages.GameStage; 

public class MainGame extends ApplicationAdapter { 

    public static final int MIN_WIDTH = 480; 
    public static final int MIN_HEIGHT = 800; 

    public static SpriteBatch batch; 
    public static GameStage game; 
    public static Skin skin; 
    public static Viewport viewport; 
    public static Stage stage; 

    @Override 
    public void create() { 
     viewport = new ExtendViewport(MIN_WIDTH, MIN_HEIGHT); 
     batch = new SpriteBatch(); 
     initSkin(); 
     game = new GameStage(viewport, batch, skin); 
     setStage(game); 
    } 

    @Override 
    public void dispose() { 
     super.dispose(); 
     game.dispose(); 
     skin.dispose(); 
    } 

    public void initSkin() { 
     skin = new Skin(Gdx.files.internal("skins/uiskin.json")); 
    } 

    @Override 
    public void render() { 
     stage.act(Gdx.graphics.getDeltaTime()); 
     stage.draw(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     viewport.update(width, height, true); 
    } 

    public Skin getSkin() { 
     return skin; 
    } 

    public static void setStage(Stage stage) { 
     MainGame.stage = stage; 
     Gdx.input.setInputProcessor(stage); 
    } 
} 
+0

@Townsnflok Я думаю, что ошибка в другой части кода, потому что я думаю, что код, не отражающий поведение, которое вы получаете, возможно, вы изменили stage.getCamera или пакет или, возможно, что-то подобное на некоторых point, мог бы просмотреть ваш код и/или добавить его в вопрос. P.S: можно также посмотреть окно просмотра, это только мое мнение –

+0

Я добавлю камеру и видовое окно, но я не изменяю его, просто настраивая ExtendViewport с минимальным размером. – Townsfolk

ответ

8

Хорошо, наконец, понял это. Оказывается, Table в пределах ScrollPane не может быть установлен для заполнения родительского элемента.

table.setFillParent(true); 

Вызывает проблему. Не уверен, почему он это делает, но удаление setFillParent(true) устраняет проблему.

+0

Даже с LibGDX 1.9.3 это проблема - у меня была метка (с setFillParent) внутри ScrollPane, и у нее тоже был огромный пробел. Удалено setFillParent, проблема решена. Благодаря! – Max