【问题标题】:libgdx, several stages in one screenlibgdx,一个屏幕中的多个阶段
【发布时间】:2014-10-10 09:08:44
【问题描述】:

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

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

【问题讨论】:

    标签: android libgdx screen stage


    【解决方案1】:

    请再次阅读Viewports wiki article。尤其是“使用”部分。

    您不应该在每个调整大小事件上都创建新的视口。这几乎破坏了视口的功能。此外,您当前将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();
    }
    

    【讨论】:

    • @noone 我正在尝试用两个阶段做类似的事情。不带参数的viewport.update()方法不存在?
    • @RussWheeler 没错。已重命名为apply()
    • 我实际上设法通过使用参数进行更新来使其工作,但很高兴知道它应该改为应用。快速的侧面问题,但是现在只在渲染中做视口的东西就可以了,不需要调整大小?
    • @RussWheeler 如果您使用不同的视口,则必须在渲染中进行。如果您只有一个(类型)视口,则应在调整大小时进行调整,否则在渲染中将是不必要的开销。
    • @noone 好的,谢谢你的回答,这就是我正在做的事情,但知道你做对了总是很高兴
    猜你喜欢
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多