我在一个屏幕中使用两个阶段。一个 - 用于游戏 Actor ,另一个 - 用于控制按钮等等。我使用 FitViewport 进行游戏阶段。
我应该使用什么功能“调整大小”?像这样的东西:
public void resize(int width, int height) {
FitViewport vpC = new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
stageC.setViewport(vpC);
stageC.getViewport().update(width, height, true);
FitViewport vpG = new FitViewport(MyWorld.WIDTH, MyWorld.HEIGHT);
stageG.setViewport(vpG);
stageG.getViewport().update(width, height, true);
}
没有给出正确的结果。
Actor 扭曲或按钮没有正确的坐标。这取决于我在 func resize 中首先放置的视口(viewport) - vpC 或 vpG。
我应该使用什么正确的方法?
最佳答案
请再次阅读 Viewports wiki article。尤其是“用法”部分。
您不应该在每个调整大小事件上创建新视口(viewport)。这几乎破坏了视口(viewport)的功能。此外,您目前将 FitViewport
用于 vpC
的方式(请开始使用更好的变量名称),它应该表现得像 ScreenViewport
。 FitViewport
具有您定义一次的“虚拟分辨率”。然后在调整大小事件时,当更新视口(viewport)时,它会缩放这个虚拟视口(viewport)以适应屏幕,同时保持纵横比。 (可能会导致黑条)。Viewport.update(...)
方法的最后一个标志也应该只在 UI 的情况下是 true
。在“游戏” Stage
的情况下,您不希望相机居中。
public void show() {
stageC = new Stage(new ScreenViewport());
stageG = new Stage(new FitViewport(MyWorld.WIDTH, MyWorld.HEIGHT));
}
public void resize(int width, int height) {
stageC.getViewport().update(width, height, true);
stageG.getViewport().update(width, height, false);
}
然而,还有一个问题。由于您为舞台使用了两种不同的视口(viewport)缩放策略,因此您需要在渲染前分别“激活”它们。这可以通过对两个阶段使用相同的
FitViewport
来避免(最简单的解决方案,可能是你想要的)。public void render(float deltaTime) {
// this will "activate" the viewport
stageC.getViewport().apply();
stageC.act();
stageC.draw();
// now switch the viewport and activate the other one
stageG.getViewport().apply();
stageG.act();
stageG.draw();
}
关于android - libgdx,一个屏幕上的几个阶段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25346611/