LIBGDX - Table 的文本按钮未填充相应的行

LIBGDX - Table's textButtons are not filling the respective rows

我最近在开发一款使用 Scene2D 的游戏,直到 运行 遇到了这个问题,如图所示:

我可以单击按钮的范围超出了实际的 TextButton 区域

我阅读了 GitHub 页面 here 中的 TableLayouts 文档,并阅读了关于 Scene2D 的不同文章,我尝试摆弄不同的功能(例如 padding、colSpan ) 试图找到解决方案,但我似乎找不到解决这个问题的方法。

这里是负责table设置和绘图的代码:

table = new Table();
table.setDebug(true);
table.add(graphicsButton).width(200f).height(200f);
table.row();
table.add(audioButton).width(200f).height(200f);
table.row();
table.add(backToTitleButton).width(200f).height(200f);

table.setBounds(0, 0, stage.getWidth(), stage.getHeight());

stage.addActor(table);

这是代码的其余部分(请注意,我还没有将按钮中的文本居中,我只添加了填充值,还有 - 我'为方便起见,我们从屏幕 class 中删除了空函数)

import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.thesameritan.game.GUI.UI;

public class OptionsScreen extends ScreenProperties implements Screen {

    private Stage stage;
    private Table table;

    OptionsScreen (final Game game) {
        super();

        stage = new Stage(new ScreenViewport());
        Gdx.input.setInputProcessor(stage);

        TextButton backToTitleButton = UI.createNewButton("BACK", buttonStyle, 0.8f, 25f, 0.9f); //creates button from another class with text, style, padBottom, padLeft and fontScale
        TextButton graphicsButton = UI.createNewButton("GRAPHICS", buttonStyle, 0.9f, 20f, 0.9f);
        TextButton audioButton = UI.createNewButton("AUDIO", buttonStyle, 0.9f, 20f, 0.9f);


        backToTitleButton.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                //branch to title
            }
        });

        graphicsButton.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                //branch to graphics
            }
        });

        audioButton.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                //branch to options
            }
        });

        table = new Table();
        table.setDebug(true);
        table.add(graphicsButton).width(200f).height(200f);
        table.row();
        table.add(audioButton).width(200f).height(200f);
        table.row();
        table.add(backToTitleButton).width(200f).height(200f);

        table.setBounds(0, 0, stage.getWidth(), stage.getHeight());

        stage.addActor(table);
    }

    @Override
    public void render (float delta) {
        clearScreen(); //from ScreenProperties
        stage.draw();
    }

    @Override
    public void dispose() {
        disposeObjects(); //from ScreenProperties
        stage.dispose();
    }
}

我想要的是 在不影响按钮大小的情况下最小化按钮之间的间隙 - 同样,我尝试通过更改 .width().height() 值或 实际上减小了交互区域的大小(如红线所示)

非常感谢!

这里有趣但缺失的部分是 UI.createNewButton。

您可以调试按钮本身,而不是将调试设置到外部 table:backToTitleButton.setDebug(true)。您会看到点击范围没有超出按钮区域,但图形表示不正确。我怀疑您没有为矩形使用 Ninepatch。