Проблема с кнопками в Table LibGDX

426
08 февраля 2017, 23:48

В общем, проблема заключается в следующем: при добавлении кнопок на Table возникает сдвиг их области нажатия. На рисунке 1. показано общий вид UI, на 2 - примерные места реагирования.

Если добавить кнопку непосредственно на stage - все работает нормально.

public class SettingsState extends State {
private Stage uiStage;
private Table table;
//1
private Button musicButton;
private Slider musicSlider;
//2
private Button soundButton;
private Slider soundSlider;
//3
private TextField defaultName;
private TextButton okButton;
//4
private CheckBox mouseControl;
//5
private Label up;
private TextField upText;
//6
private Label down;
private TextField downText;
//7
private Label left;
private TextField leftText;
//8
private Label right;
private TextField rightText;
//9
private Label special;
private TextField specialText;
public SettingsState(GameStateManager gsm) {
    super(gsm);
    uiStage = new Stage();
    BackgroundActor bgActor = new BackgroundActor(2);
    bgActor.setSize(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
    uiStage.addActor(bgActor);
    musicButton = new Button(ResourceLoader.getInstance().UI_SKIN,"music");
    musicSlider = new Slider(0,10,1,false,ResourceLoader.getInstance().UI_SKIN);
    musicSlider.setValue(8);
    soundButton = new Button(ResourceLoader.getInstance().UI_SKIN,"sound");
    soundSlider = new Slider(0,10,1,false,ResourceLoader.getInstance().UI_SKIN);
    defaultName = new TextField("",ResourceLoader.getInstance().UI_SKIN);
    defaultName.setMessageText("Write your default name");
    okButton = new TextButton("Ok",ResourceLoader.getInstance().UI_SKIN,"default");
    mouseControl = new CheckBox(" Mouse control",ResourceLoader.getInstance().UI_SKIN,"switch");
    up = new Label("Up",ResourceLoader.getInstance().UI_SKIN,"subtitle");
    down = new Label("Down",ResourceLoader.getInstance().UI_SKIN,"subtitle");
    left = new Label("Left",ResourceLoader.getInstance().UI_SKIN,"subtitle");
    right = new Label("Right",ResourceLoader.getInstance().UI_SKIN,"subtitle");
    special = new Label("Special",ResourceLoader.getInstance().UI_SKIN,"subtitle");
    up.setAlignment(Align.center);
    down.setAlignment(Align.center);
    left.setAlignment(Align.center);
    right.setAlignment(Align.center);
    special.setAlignment(Align.center);
    upText = new TextField("W",ResourceLoader.getInstance().UI_SKIN);
    downText = new TextField("S",ResourceLoader.getInstance().UI_SKIN);
    leftText = new TextField("A",ResourceLoader.getInstance().UI_SKIN);
    rightText = new TextField("D",ResourceLoader.getInstance().UI_SKIN);
    specialText = new TextField("SPACE",ResourceLoader.getInstance().UI_SKIN);
    upText.setAlignment(Align.center);
    downText.setAlignment(Align.center);
    leftText.setAlignment(Align.center);
    rightText.setAlignment(Align.center);
    specialText.setAlignment(Align.center);
    table = new Table(/*ResourceLoader.getInstance().UI_SKIN*/);
    table.setSize(Gdx.graphics.getHeight()/2, Gdx.graphics.getHeight()/2);
    table.setPosition(Gdx.graphics.getWidth()/2-table.getWidth()/2,
            Gdx.graphics.getHeight()/2-table.getHeight()/2);
    int pad = 5;
    int elements = 9;
    float height = ((table.getHeight()-50)/elements)-pad*2;
    int firstCollumnWidth = (int) (table.getWidth()/8*3);
    int secondCollumnWidth = (int) (table.getWidth()/8*4);
    table.defaults().expand();
    table.add(musicButton);
    table.add(musicSlider).width(secondCollumnWidth);
    table.row();
    table.add(soundButton);
    table.add(soundSlider).width(secondCollumnWidth);
    table.row();
    table.add(mouseControl).pad(pad).center().colspan(2).height(height);
    table.row();
    table.add(okButton).pad(pad).width(firstCollumnWidth).height(height);
    table.add(defaultName).pad(pad).width(secondCollumnWidth).height(height);
    table.row();
    table.add(up).pad(pad).width(firstCollumnWidth).height(height);
    table.add(upText).pad(pad).width(secondCollumnWidth).height(height);
    table.row();
    table.add(down).pad(pad).width(firstCollumnWidth).height(height);
    table.add(downText).pad(pad).width(secondCollumnWidth).height(height);
    table.row();
    table.add(left).pad(pad).width(firstCollumnWidth).height(height);
    table.add(leftText).pad(pad).width(secondCollumnWidth).height(height);
    table.row();
    table.add(right).pad(pad).width(firstCollumnWidth).height(height);
    table.add(rightText).pad(pad).width(secondCollumnWidth).height(height);
    table.row();
    table.add(special).pad(pad).width(firstCollumnWidth).height(height);
    table.add(specialText).pad(pad).width(secondCollumnWidth).height(height);

    uiStage.addActor(table);
    /*window.add(table);
    uiStage.addActor(window);*/
    Gdx.input.setInputProcessor(uiStage);
}
@Override
protected void handleInput() {
    musicSlider.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            //preference.setVolumen(volumenSlider.getValue());
        }
    });
    soundSlider.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            //preference.setSound(volumenSlider.getValue());
        }
    });
    okButton.addListener(new ClickListener(){
        @Override
        public void clicked(InputEvent e, float x, float y){
        }
    });

}
@Override
public void update(float dt) {
    uiStage.act(Gdx.graphics.getDeltaTime());
}
@Override
public void render(SpriteBatch sb) {
    uiStage.draw();
}
@Override
public void dispose() {
}
@Override
public void doWhenClose() {
}}

Как исправить, чтобы все кликалось на своих местах?

READ ALSO
работа с MySql Java

работа с MySql Java

есть вот такой код, мне надо сделать общий запрос sql в базу данных, чтобы он работал в моих разных методах

357
Объявление интерфейса в интерфейсе

Объявление интерфейса в интерфейсе

Тело интерфейса может объявлять члены интерфейса, те

314
Целевой тип лямбда-выражения

Целевой тип лямбда-выражения

Что называется целевым типом лямбда-выражения?

1146
Запуск программы после checkout в SVN

Запуск программы после checkout в SVN

Как запустить проект (программу) в Eclipse? Есть проект джава, я его через SVN сохранил на компьютер для последующего дебагаНо у меня не выходит...

345