使用以下调用使应用程序全屏显示时:
Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
我不再有来自控制器的信号。从全屏更改显示后问题无法解决,例如:
Gdx.graphics.setWindowedMode(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
我正在使用Gdx版本:1.9.8。看来这是以前版本中修复的一个问题,但我不确定是什么必要的步骤才能使工作正常运行。这是我发现的关于这个问题的一些帖子:
https://github.com/libgdx/libgdx/issues/4723
https://github.com/GoranM/bdx/issues/518
(这个很老)http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=10692
任何帮助深表感谢。
*编辑:这是使用可以从libgdx设置应用程序检查的控制器扩展。 *
编辑2:如果我重新轮询控制器,我可以得到一个响应控制器,如下所示:
Array<Controller> controllers = Controllers.getControllers();
但是,在改变显示模式后,这不能立即完成;我必须等待一段时间。我不确定我需要轮询什么来确定我必须等到控制器实例有效多久(同样,当它有效分配一个监听器时)。
Edit3:我能够想出的唯一解决方案是在resize回调中设置一个标志,如下所示
@Override
public void resize(int width, int height) {
resizeDirty = true;
resizeTimestamp = System.currentTimeMillis();
}
然后在我的主循环调用中:
private void controllerCheck() {
if (resizeDirty) {
long currentTime = System.currentTimeMillis();
if (currentTime > resizeTimestamp + controllerResetDelay) {
resizeDirty = false;
//get new controller instance | re-add a controller listener
}
}
}
这不是理想的,我宁愿找到一种方法来监听上下文的变化是否已经完成初始化然后更新控制器。但我无法为此找到一个钩子。如果有人知道更好的方法来保持控制器的显示模式改变,我会很感激。