【问题标题】:Crash when setting a new screen设置新屏幕时崩溃
【发布时间】:2023-03-31 13:45:01
【问题描述】:

在我即将完成的游戏中,我想在游戏结束时设置一个新屏幕。我得到了我的游戏结束方法:

    private void gameOver(Label score) {
    for (Body body : worldBodies) {
        world.destroyBody(body);
    }
    dispose();
    ((Game) Gdx.app.getApplicationListener()).setScreen(new GameOver());
}

每当调用该方法时,屏幕都会冻结一秒钟,并且游戏会因以下语句而崩溃:

JNI DETECTED ERROR IN APPLICATION 
09-02 22:04:34.036      391-425/com.joelbrun.jetskirider.android A/libc﹕ Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 425 (GLThread 29501)

【问题讨论】:

  • 到目前为止,您采取了哪些步骤来尝试诊断问题?

标签: java android crash libgdx


【解决方案1】:

尝试更新您的代码以匹配以下内容:

private void gameOver(Label score) {
    for (Body body : worldBodies) {
        world.destroyBody(body);
    }
    dispose();
    myGame.setScreen(new GameOver());
}

第一个问题是您在循环的内部而不是它之后处理/加载GameOver屏幕。

第二个问题是您致电Gdx.app.getApplicationListener()。每次您调用它时,它都会返回您的Game 的一个新实例。相反,您需要保留对游戏的引用并使用它。

如果您仍然遇到同样的错误,请确保您正确调用 dispose()。如果资源在释放之前就被处理掉了,那么你可能会遇到一些非常糟糕的崩溃。

【讨论】:

  • 它仍然崩溃:JNI DETECTED ERROR IN APPLICATION
  • @JoelBrun 其余的异常是什么?
  • 所以看起来父进程已经死了,这就是你得到DeadObjectException的原因。当你不打电话给dispose() 时它会起作用吗?可能会查看this post
  • 如果没有处理它也会崩溃
  • 那它什么时候崩溃呢?当Body 被销毁或在调用setScreen 期间的某个时间?
猜你喜欢
  • 2013-04-22
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多