具有不同视口的同一屏幕上的多个阶段 LIBGDX
Multiple Stages on Same screen with different viewport LIBGDX
我正在尝试扩展我的应用程序以使其在各种纵横比下都能以相似的方式工作。
我阅读了有关视口和相机的内容。并得出结论,我应该在我的游戏阶段使用 FitViewport,这样就不会拉伸任何资产。我将使用一些背景图像来填充由 fitviewport 引起的黑条。但问题是,每当我使用 FitViewport 以外的任何其他视口作为背景图像时,整个舞台(背景和主舞台)都会被拉伸,有没有办法让我们摆脱 FitViewport 的 black/white 栏?我尝试了所有背景视口,即 StretchViewport、ScreenViewport、FillViewport。
我是不是遗漏了一些非常微不足道的东西?或者可以在同一个屏幕上设置多个不同的视口。
ps 我能够在同一屏幕上设置两个不同大小的相同视口。
这是屏幕,我正在获取 fitviewport。注意我试图消除的顶部和底部的白条。
对我有用。仅供参考
You would need a second viewport, probably ExtendViewport with the
same virtual dimensions as your FitViewport.
//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();
If you want to be sure the border stuff doesn't overlap your game, you
could swap the draw order above.
Or you could just use ExtendViewport to begin with for everything.
我正在尝试扩展我的应用程序以使其在各种纵横比下都能以相似的方式工作。
我阅读了有关视口和相机的内容。并得出结论,我应该在我的游戏阶段使用 FitViewport,这样就不会拉伸任何资产。我将使用一些背景图像来填充由 fitviewport 引起的黑条。但问题是,每当我使用 FitViewport 以外的任何其他视口作为背景图像时,整个舞台(背景和主舞台)都会被拉伸,有没有办法让我们摆脱 FitViewport 的 black/white 栏?我尝试了所有背景视口,即 StretchViewport、ScreenViewport、FillViewport。
我是不是遗漏了一些非常微不足道的东西?或者可以在同一个屏幕上设置多个不同的视口。
ps 我能够在同一屏幕上设置两个不同大小的相同视口。 这是屏幕,我正在获取 fitviewport。注意我试图消除的顶部和底部的白条。
You would need a second viewport, probably ExtendViewport with the same virtual dimensions as your FitViewport.
//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();
If you want to be sure the border stuff doesn't overlap your game, you could swap the draw order above.
Or you could just use ExtendViewport to begin with for everything.