为了组织的缘故,我为游戏使用了多个场景,而不是让每个场景都具有一个接收视口的构造函数(我的游戏是可缩放的),我想将每个阶段的视口与构造函数分开设置,然后在设置视口之后,添加演员。在主类中,将发生以下情况:
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();
}
但是,所有这些给了我一个黑屏……我尝试更新相机和视口,但无济于事(请注意,actor正在调用其render方法)。
为什么会出现黑屏,该如何解决?如果不可能,我将恢复使用构造函数。
最佳答案
如果我正确理解,您想这样做:
Stage stage1 = new Stage();
stage1.getViewport().update(width, height);
而不是这样:
Stage stage1 = new Stage (new StretchViewport(width, height)); // It doesn't have to be StretchViewport
在第一种情况下(您要尝试执行的操作),ScalingViewport会自动为您构造Gdx.graphics和正交摄影机的尺寸,其行为类似于StretchViewport。为什么不直接在通过所需视口的位置使用第二种情况。您随时可以通过调用
stage1.getViewport().update(width, height);
随时更改视口。或在较旧的Libgdx版本中调用
stage1.setViewport(width, height, false);
。视口最近发生了变化,因此,如果您可以扩展视口类以覆盖更新方法,也许可以实现所需的目标:
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);
这样,您可以更改舞台视口并重新初始化资产。
关于java - LibGDX-Stage.setViewport(new Viewport())黑屏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24228748/