gpt4 book ai didi

android - libgdx,一个屏幕中的多个阶段

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:30 26 4
gpt4 key购买 nike

我在一个屏幕上使用两个阶段。一个 - 用于游戏 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)的功能。此外,您目前为 vpC 使用 FitViewport 的方式(请开始使用更好的变量名称),它的行为应该像 ScreenViewportFitViewport 有一个您定义一次的“虚拟分辨率”。然后在调整大小事件中,在更新视口(viewport)时,它将缩放此虚拟视口(viewport)以适合屏幕,同时保持纵横比。 (可能会导致黑条)。

在 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);
}

但是还有一个问题。由于您为舞台使用了两种不同的视口(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com