【问题标题】:Stage object won't center and scale to be same on every screen舞台对象不会在每个屏幕上居中和缩放相同
【发布时间】:2016-12-04 19:21:49
【问题描述】:

我有 2 个问题似乎都很容易。

首先,我正在开发一款 LibGDX 游戏,但我的一个 Table 对象不会居中

Table table = new Table();
    table.setFillParent(true);
    table.add(preview).size(preview.getWidth(), preview.getHeight()).center().padBottom(40);
    table.row();
    table.add(last).size(last.getWidth(), last.getHeight()).center().left().padLeft(250);
    table.add(next).size(next.getWidth(), next.getHeight()).center().right().padRight(250);

我尝试了上面的代码,但结果是(我希望关卡预览居中)


问题 2

在我的手机上,这些图片都非常适合。但是在这款手机上它们更小,我如何将它缩放到每部手机上的相同尺寸,是 FitViewPort 的东西吗?

【问题讨论】:

    标签: java android android-studio libgdx


    【解决方案1】:

    问题 #1:

    改变

    table.add(preview).size(preview.getWidth(), preview.getHeight()).center().padBottom(40);

    table.add(preview).size(preview.getWidth(), preview.getHeight()).center().padBottom(40).colspan(2);

    问题 #2:

    FitViewport 可能会导致出现黑条,但图像会根据纵横比进行缩放。如果您想根据手机尺寸缩放图像,请尝试使用 StretchViewport

    【讨论】:

    • 对于第一个,我怎样才能让它只居中预览,因为它也居中我的下一个和最后一个按钮。
    • 可能会删除 padLeftpadRightcenter() 设置。使用table.debug()查看表格是如何绘制的。
    • 感谢问题 2,我创建了一个 StreatchViewport 并给它我的高度和宽度?我如何将其应用于所有内容
    • 是的,我会使用this class。类似public class MyStage extends AbstractStretchStage
    【解决方案2】:

    要使预览图像居中,它的单元格需要跨越所有列。如果您希望图像完全适合,则无需尝试将单元格调整为图像大小。

    如果您希望两个按钮位于中间,请将它们的每个单元格尽可能宽,并将它们偏向中间单元格的一侧。

    这样做:

    table.setFillParent(true);
    table.add(preview).colSpan(2).expandX().center().padBottom(40);
    table.row();
    table.add(last).expandX().right();
    table.add(next).expandX().left();
    

    ScreenViewport 非常适合 UI 阶段,因为它可以生成漂亮清晰的文本。但缺点是您需要根据设备分辨率准备好多种 UI 资源大小。

    或者,您可以将 ExtendViewport 用于您的 UI,这样您只需要一个资产规模。

    其余的视口类都是垃圾(IMO):

    • FitViewport 会创建黑条(您的用户不会喜欢这样,因为手机屏幕太小了)。如果您将它用于 UI 层也没关系,但是在绘制 UI 之前,您需要一个不同的视口来应用其他所有内容。如果你正在制作一个可以原谅黑条的过场动画,你可以暂时使用一个。
    • StretchViewport 会导致丑陋的变形拉伸。
    • FillViewport 会导致您的虚拟视口大小的一部分被裁剪掉,因此您必须进行各种数学运算以确保您的场景在所有设备上都完全可见。

    【讨论】:

    • 所以对于ExtendViewport,我只是把它放在我初始化舞台ExtendViewport vp = new ExtendViewport(width,height,camera)和Stage s = new Stage(vp)的地方,然后在我的渲染方法sb中。 setProjectionMatrix(vp.getCamera().combined)?我是视口的新手
    • 取决于您是否将精灵批处理用于舞台以外的任何东西。如果您只使用 Stage 进行绘图,那么它会处理视口和相机的内容。但是您必须始终更新resize()中的视口
    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 2013-11-02
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    相关资源
    最近更新 更多