libgdx,一个屏幕中的几个阶段

时间:2014-08-17 05:45:39

标签: android libgdx screen stage

我在一个屏幕上使用两个阶段。一个 - 用于游戏演员,另一个用于控制按钮等。我使用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);

}

没有给出正确的结果。

演员失真或按钮没有右坐标。这取决于我在func resize中首先放置的视口 - vpC或vpG。

我应该使用什么正确的方法?

1 个答案:

答案 0 :(得分:8)

请再次阅读Viewports wiki article。特别是"用法"一部分。

您不应该在每个resize事件上创建新的视口。这几乎破坏了视口的功能。此外,您当前使用FitViewport vpC的方式(请开始使用更好的变量名称),它的行为应该像ScreenViewportFitViewport有一个"虚拟分辨率"你定义一次。然后在调整大小事件时,更新视口时,它将缩放此虚拟视口以适合屏幕,同时保持纵横比。 (可能会导致黑条)。

如果是UI,Viewport.update(...)方法的最后一个标志也应该只有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);
}

然而还有一个问题。由于您为舞台使用了两种不同的视口缩放策略,因此您需要激活"它们在渲染前单独出现这可以通过对两个阶段使用相同的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();
}