【问题标题】:libgdx scene2d buttons stretchedlibgdx scene2d 按钮被拉伸
【发布时间】:2017-04-18 19:29:35
【问题描述】:

我正在尝试为我的游戏制作控件,总共只有四个按钮,右下角 2 个,左下角 1 个,右上角 1 个,但是皮肤非常拉伸并且行为怪异。我尝试了libgdx skin repository 的不同皮肤,它们的行为都不同,有些向右拉伸很多,有些则很大。这是我的代码:

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。

【问题讨论】:

    标签: java libgdx scene2d


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      LibGDX 中的 UI 小部件实际上是为 ScreenViewport 设计的,因为 UI 类型的东西如果不完美地绘制像素通常是丑陋的。但是您可以通过在纹理上设置三线性过滤、关闭支持它的小部件的舍入以及关闭任何字体的“使用整数位置”来摆脱使用其他类型的视口。

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

      除此之外,您似乎正在根据相机设置表格大小,但不能保证在您设置小部件时相机的大小正确。不要设置它的大小,而是调用table.setFillParent(true),这样它就会自动适应视口的大小。

      【讨论】:

      • 我把我的视口宽度和高度调大了,但我不知道该选择哪个尺寸,因为我不完全了解视口宽度和高度的影响,如果我调整尺寸我应该使用哪些尺寸他们起来了吗?
      • 这取决于您希望它看起来有多清晰。大多数皮肤使用 NinePatches 作为小部件的背景。 NinePatches 的边缘区域以 1 像素到 1 个世界单位的大小绘制。因此,视口尺寸越大,按钮的外观就越清晰。
      • 好的,谢谢,视口宽度和高度是什么意思?这是否意味着以米为单位的世界大小?
      • 因为我把它们做得更大了,而且它们现在看起来不错,但是如果我将尺寸设置为 100,100,由于某种原因它们不是方形的
      • 文档中解释的很清楚。听起来您正在使用 StretchViewport,没有人应该使用它。世界单位是任意的。对于 UI,单位是源纹理的像素。