Java libgdx场景2D按钮拉伸

Java libgdx场景2D按钮拉伸,java,libgdx,scene2d,Java,Libgdx,Scene2d,我正在尝试为我的游戏制作控件,总共有四个按钮,两个右下角,一个左下角,一个右上角,但是皮肤非常拉伸,行为怪异。我试过不同的皮肤,它们的动作都不一样,有些皮肤向右边伸展了很多,有些皮肤变大了。这是我的密码: table = new Table(); boostButtonSkin = new Skin(Gdx.files.internal("star-soldier/skin/star-soldier-ui.json")); boostButton = new ImageButton(boos

我正在尝试为我的游戏制作控件,总共有四个按钮,两个右下角,一个左下角,一个右上角,但是皮肤非常拉伸,行为怪异。我试过不同的皮肤,它们的动作都不一样,有些皮肤向右边伸展了很多,有些皮肤变大了。这是我的密码:

table = new Table();

boostButtonSkin = new Skin(Gdx.files.internal("star-soldier/skin/star-soldier-ui.json"));

boostButton = new ImageButton(boostButtonSkin);


table.setWidth(stage.getCamera().viewportWidth);
table.setHeight(stage.getCamera().viewportHeight);

table.setDebug(true);
table.bottom().left();
table.add(boostButton).width(2).height(2);
stage.addActor(table);

视口宽度和高度分别为40和24。

这听起来像是你忘了调整大小。调整大小的方法如下所示

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

LibGDX中的UI小部件实际上是为屏幕视口而设计的,因为UI类型的东西如果画得不完美,通常会很难看。但您可以通过在纹理上设置三线过滤、关闭支持它的小部件的舍入,以及关闭任何字体的“使用整数位置”来避免使用其他类型的视口

但即便如此,您也需要使用相当大的虚拟视口尺寸(每个尺寸中有几百个单位)。你的单位太小了,无法正确绘制九步棋


除此之外,看起来您正在根据相机设置表的大小,但无法保证在设置小部件时相机的大小是正确的。与其设置其大小,不如调用
table.setFillParent(true)
,这样它将自动适应视口的大小。

我将视口的宽度和高度调大,但我不知道要选择哪些尺寸,因为我不完全理解视口的宽度和高度的影响,如果我把尺寸放大,我应该使用什么尺寸?这取决于你希望它看起来有多锋利。大多数皮肤使用九匹配作为小部件的背景。九对的边缘区域以一个像素对一个世界单位的大小绘制。所以你的视口尺寸越大,你的按钮看起来就越清晰。好的,谢谢,视口的宽度和高度是什么意思?这是否意味着世界的大小(以米为单位)?因为我把它们做得更大了,它们现在看起来也不错,但如果我将大小设置为100100,它们就不是正方形了,因为某些原因,文档中对此进行了清楚的解释。听起来您使用的是StretchViewport,任何人都不应该使用它。世界单位是任意的。对于UI,单位为源纹理的像素。