In general, the problem is this: when adding buttons to a Table, a shift in their area of ​​depression occurs. Figure 1. shows a general view of the UI, 2 shows approximate places of response.

Figure 1. General view of the UI

Figure 2. Visibility of response sites

Figure 3. Display with debug enabled

If you add a button directly to the stage, everything works fine.

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() { }} 

How to fix everything to click in their places?

  • Show what happens if you display the table in debug mode? - Master Flomaster
  • Added by 3rd image. - Killersssurprise
  • Try instead of table.setSize () and table.setPosition () to use table.setFillParent (true). - Master Flomaster
  • Thank you, but this is not the root of the problem. While I understood, I noticed that it started to work after I changed the screen resolution. After examining the problem, it turned out that all buttons and elements have this behavior, regardless of whether they are in the table or not. It turned out that the problem is that I did not redefine the resize method. - Killersssurprise
  • @Killersssurprise, off topic, How did you make your skin? Share links to info. Thank. - ravend

0