我有一个libgdx应用程序。当我使用libgdx 1.1.4和robovm 1.0.0.Beta版本时,它曾经在Android和IOS上正常工作。最近我升级到了libgdx 1.6.3和robovm 1.4。现在Android版工作正常,但IOS应用程序有一点小故障。问题是,如果我按下主页按钮暂停应用程序然后恢复它,我会得到一个黑屏。应用程序不会崩溃。我也没有在日志中看到任何内容。
有没有人有任何想法会发生什么?
我真的很感激任何帮助。提前谢谢。
__ UPDATE __
让我感到震惊的是,当我恢复游戏时,没有一个简历方法(XXXGame类和XXXScreen类中都没有)被调用。确切地说,我在所有这些方法中都有日志语句,以了解程序流程的进展情况。当我暂停游戏时,我会看到日志,但是当我恢复游戏时,我看到了什么。
这看起来是一个根本问题,因为正如您所知,resume方法是libgdx生命周期方法的一部分,无论如何都应该调用。问题不能出现在libgdx端,因为app在Android上工作正常。所以,我想知道robovm方面是否有问题。我错过了什么吗?
__ UPDATE2 __
我使用gui创建了一个新的libgdx项目,以确定IOS平台上是否出现同样的问题。看起来暂停 - 恢复 - 暂停 - 恢复在新项目上运行正常。所以我开始比较我的新项目。我的游戏类继承自com.badlogic.gdx.Game,但新项目的游戏类实现了com.badlogic.gdx.ApplicationAdapter。我已经改变它以使它们匹配。它没有打破新项目。
默认实现是在Game类上缺少resume方法。所以我添加了以下内容:
@Override
public void resume() {
// super.resume();
Gdx.app.log("Testing", "resume");
}
令我惊讶的是,在日志中,我看到两组简历消息如下:
2015-07-01 08:05:52.435 IOSLauncher[54152:2661071] [debug] IOSApplication: created
2015-07-01 08:05:52.706 IOSLauncher[54152:2661071] [debug] IOSApplication: resumed
2015-07-01 08:05:59.093 IOSLauncher[54152:2661071] [debug] IOSApplication: paused
2015-07-01 08:05:59.093 IOSLauncher[54152:2661071] [info] Testing: pause
2015-07-01 08:06:00.670 IOSLauncher[54152:2661071] [debug] IOSApplication: resumed
2015-07-01 08:06:00.670 IOSLauncher[54152:2661071] [info] Testing: resume
2015-07-01 08:06:04.587 IOSLauncher[54152:2661071] [debug] IOSApplication: paused
2015-07-01 08:06:04.587 IOSLauncher[54152:2661071] [info] Testing: pause
2015-07-01 08:06:06.640 IOSLauncher[54152:2661071] [debug] IOSApplication: resumed
2015-07-01 08:06:06.640 IOSLauncher[54152:2661071] [info] Testing: resume
2015-07-01 08:06:09.300 IOSLauncher[54152:2661071] [debug] IOSApplication: paused
2015-07-01 08:06:09.300 IOSLauncher[54152:2661071] [info] Testing: pause
我不确定这个 IOSLauncher [54152:2661071] [debug] IOSApplication:resumed 行的记录在哪里。我在方法中注释掉 super.resume()以防止它,但它没有帮助。
我检查了自己的应用程序,看看我是否得到类似 IOSLauncher [54152:2661071] [debug] IOSApplication:恢复的内容,但我不能。
当我摆弄代码并记录我在这里做的事情时,我发现了问题。我很快就会在这里发布。
答案 0 :(得分:1)
我发现了问题。我将在这里记录它,希望它可以节省时间给别人。
以下方法来自IOSLauncher.java(在IOS项目中)
@Override
public void didBecomeActive (UIApplication application) {
FacebookManager.getInstance().handleDidBecomeActive(application);
}
@Override
public void willTerminate (UIApplication application) {
FacebookManager.getInstance().handleWillTerminate(application);
}
以上代码用于在早期版本的libgdx / robovm中没有任何故障的情况下正常工作。实际上我当时已经完成了robovm IOS bindings中提到的任何事情。但现在这是一个禁忌的事情。以下对这些方法的更改解决了问题:
@Override
public void didBecomeActive (UIApplication application) {
super.didBecomeActive(application);
FacebookManager.getInstance().handleDidBecomeActive(application);
}
@Override
public void willTerminate (UIApplication application) {
super.willTerminate(application);
FacebookManager.getInstance().handleWillTerminate(application);
}
我感谢所有花时间并就此问题分享宝贵意见的人。