首页 > 解决方案 > 同一屏幕上具有不同视口 LIBGDX 的多个阶段

问题描述

我正在尝试扩展我的应用程序以在各种纵横比上类似地工作。

我阅读了有关视口和相机的信息。并得出结论,我应该在我的游戏阶段使用 FitViewport,这样就不会拉伸任何资产。我将使用一些背景图像来填充由 fitviewport 引起的黑条。但问题是,每当我使用 FitViewport 以外的任何其他视口作为背景图像时,整个舞台(背景和主舞台)都会被拉伸,有没有办法摆脱 FitViewport 的黑白条?我尝试了所有的背景视口,即 StretchViewport、ScreenViewport、FillViewport。

我错过了一些非常微不足道的东西吗?或者是否可以在同一屏幕上设置多个不同的视口。

ps 我能够在同一个屏幕上设置两个不同大小的相同视口。这是屏幕,我正在寻找fitviewport。注意我试图消除的顶部和底部的白条。

在此处输入图像描述

标签: cameralibgdxviewportscene2d

解决方案


这个答案对我有用。仅供参考

您将需要第二个视口,可能是与 FitViewport 具有相同虚拟尺寸的 ExtendViewport。

//create:
fitViewport = new FitViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT);
extendViewport = new ExtendViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT);

//resize:
fitViewport.update(width, height);
extendViewport.update(width, height);

//render:

fitViewport.apply();
batch.setProjectionMatrix(fitViewport.getCamera().combined);
batch.begin();
//draw game
batch.end();

extendViewport.apply();
batch.setProjectionMatrix(extendViewport.getCamera().combined);
batch.begin();
//draw stuff in border
batch.end();

如果你想确保边界的东西不会与你的游戏重叠,你可以交换上面的绘制顺序。

或者你可以使用 ExtendViewport 来开始所有的事情。


推荐阅读