Android libgdx,一个屏幕中的多个阶段
我在一个屏幕上使用两个阶段。一个用于游戏演员,另一个用于控制按钮等等。我在游戏阶段使用FitViewport 我应该使用什么函数“调整大小”?大概是这样的: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
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();
}