Android libgdx,一个屏幕中的多个阶段

Android libgdx,一个屏幕中的多个阶段,android,libgdx,screen,stage,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); stag

我在一个屏幕上使用两个阶段。一个用于游戏演员,另一个用于控制按钮等等。我在游戏阶段使用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中首先放置的视口

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

请再读一遍。尤其是“用法”部分

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

如果是UI,则
Viewport.update(…)
方法的最后一个标志也只能是
true
。如果是“游戏”
阶段
,您不希望相机居中

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
来避免(最简单的解决方案,可能是您想要的)


@没有人,我试着用两个阶段做类似的事情。没有参数的viewport.update()方法不存在?@RussWheeler没错。它被重命名为
apply()
。实际上,我通过使用中的参数进行更新来让它工作,但很高兴知道它应该改为apply。快速补充问题,但现在只在渲染中执行视口操作就可以了,不需要在调整大小中执行任何操作?@RussWheeler如果使用不同的视口,则必须在渲染中执行。如果您只有一个(类型)视口,则应在“调整大小”中进行调整,否则在渲染中不需要额外的开销。@没问题,谢谢您的回答,这是我正在做的,但知道您做得对总是很好
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();
}