gpt4 book ai didi

java - LibGDX - Stage.setViewport(new Viewport()) 黑屏

转载 作者:行者123 更新时间:2023-12-03 07:36:41 26 4
gpt4 key购买 nike

出于组织的考虑,我在游戏中使用多个场景,而不是让每个场景都有一个接收视口(viewport)的构造函数(我的游戏是可扩展的),我想将每个阶段的视口(viewport)设置为与构造函数分开,然后在设置视口(viewport),添加 Actor 。在主类中,会发生这样的情况:

public void setStage(Stage s)
{
if(currentStage != null)
currentStage.dispose();
currentStage = s;
currentStage.setViewport(view);
}

为了使这一过程流畅进行,每个阶段都有一个 init 方法,该方法在重写的 setViewport 中调用:

@Override
public void setViewport(Viewport v)
{
super.setViewport(v);
init();
}

但是,这给我带来的只是黑屏...我尝试更新相机和视口(viewport),但无济于事(请注意, Actor 正在调用其渲染方法)。

为什么我会出现黑屏以及如何修复它?如果不可能,我将恢复使用构造函数。

最佳答案

如果我理解正确的话,你想这样做:

Stage stage1 = new Stage();
stage1.getViewport().update(width, height);

而不是这个:

Stage stage1 = new Stage (new StretchViewport(width, height)); // It doesn't have to be   StretchViewport

在第一种情况(您正在尝试执行的操作)中,将使用 Gdx.graphics 和正交相机的尺寸自动为您构建 ScalingViewport,其作用类似于 StretchViewport。为什么不直接使用第二种情况,传递你想要的视口(viewport)。您随时可以通过调用 stage1.getViewport().update(width, height);

来更改视口(viewport)

或者在较旧的 Libgdx 版本中调用 stage1.setViewport(width, height, false);

Viewport 最近发生了变化,因此如果您可以扩展 Viewport 类来覆盖更新方法,也许您可​​以实现您想要的:

public class ViewportExtendClass extends StretchViewport{

public ViewportExtendClass(float worldWidth, float worldHeight) {
super(worldWidth, worldHeight);
}

@Override
public void update (int screenWidth, int screenHeight, boolean centerCamera) {
super.update(screenWidth, screenHeight, centerCamera);
// DO YOUR INITIALIZATION HERE
}

}

从你的主类中创建新的阶段:

Stage stage1 = new Stage (new ViewportExtendClass (width, height));

然后你打电话:

stage1.getViewport().update(width, height);

像这样,您可以更改舞台视口(viewport)并重新初始化您的资源。

关于java - LibGDX - Stage.setViewport(new Viewport()) 黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24228748/

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