我的Libgdx游戏出现了一个奇怪的问题,当我打电话给" stage.draw()"时,它会冻结。奇怪的是,这只会在我转换到相关屏幕时发生。例如,我在此屏幕之前有两个启动画面,在它们成功完成后,它会在此屏幕上冻结。但是,如果这是第一个要显示的屏幕,它运行正常。
编辑:为了澄清冻结的含义,它在黑屏上无所事事,我的鼠标转到加载符号,直到我点击某处,此时我得到一个真正的Java pop-让我知道" Java(TM)平台SE二进制文件已停止工作"。事件名称:APPCRASH。
MenuScreen'渲染:
@Override
public void render(float delta) {
super.render(delta);
batch.begin();
background.draw(batch);
batch.end();
stage.act(delta);
stage.draw();
}
AbstractScreen'渲染:
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
我已经调试了它,可以告诉它到达STAGE.draw()并挂起。如果我从舞台上删除所有内容,则不会发生这种情况。舞台设置如下:
@Override
public void show() {
super.show();
background = new Sprite(buildTexture(backgroundTextureNode));
stage = new Stage();
Gdx.input.setInputProcessor(stage);
table = new Table();
table.setFillParent(true);
heading = buildLabel(headingNode);
table.add(heading).spaceBottom(TITLE_SPACE);
table.row();
transitionButtons.addAll(buildTransitionButtons(transitionButtonNodes));
for(final TextButton button : transitionButtons) {
table.add(button);
table.row();
}
stage.addActor(table);
}
我认为它可能与字体有关,但我使用默认字体制作了一个新标签,它也遇到了同样的问题。
编辑:这是我的主题转储:http://pastebin.com/JqB8fX85
修改:我有Gdx记录每个来电。这就是我得到的:
SplashScreen:名为
的构造函数
SplashScreen:显示称为
SplashScreen:7.0秒转换
SplashScreen:调整大小,称为
TYR:设置屏幕:SplashScreen
TYR:创造
SplashScreen:调整大小,称为
TYR:将游戏大小调整为:1920 x 1080
SplashScreen:处理称为
SplashScreen:构造函数称为
SplashScreen:隐藏称为
SplashScreen:显示称为
SplashScreen:7.0秒转换
SplashScreen:调整大小,称为
TYR:设置屏幕:SplashScreen
SplashScreen:名为
更新 如上所述,我有两个屏幕在菜单屏幕之前冻结。当我将那些sprite.draw(批处理)行注释掉时,它会进入第三个屏幕。经过进一步审查后,我注意到在补间回调事件期间我调用了dispose。我对此进行了评论,看看它是否以某种方式导致崩溃,并且确定它已经完全消失了。