我在一个屏幕中使用两个阶段。一个 - 用于游戏 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 的方式(请开始使用更好的变量名称),它应该表现得像 ScreenViewportFitViewport 具有您定义一次的“虚拟分辨率”。然后在调整大小事件时,当更新视口(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/

10-11 22:31
查看更多