出于组织的考虑,我在游戏中使用多个场景,而不是让每个场景都有一个接收视口(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);
或者在较旧的 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/