我正在尝试将我的应用程序从窗口切换到全屏。早些时候,这就像使用LibGDX的setDisplayMode(Display)
以及同一个库的getDesktopDisplayMode()
一样简单。不幸的是,有些事情发生了变化。
As of LibGDX 1.8.0 - 在Graphics
内 - 以前称为setDisplayMode(DisplayMode)
的内容已重命名为setFullScreenMode(DisplayMode)
,以及之前称为getDesktopDisplayMode()
的内容已重命名为getDisplayMode()
。
到那时,有人可能会认为,使用重命名的方法与以前从窗口切换到全屏的方法一样可以正常工作:
// Tabulator key triggers change from windowed to fullscreen
// The application works fine until that of pressing the tabulator key
if(Gdx.input.isKeyJustPressed(Keys.TAB))
Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
这无论如何都行不通。事实上,应用程序挂起,然后在按下tabulator key时崩溃。
值得注意的是setFullscreenMode(Display)
- according to the documentation - 返回一个布尔值,具体取决于操作是否成功。在这种情况下,如果你把它放在一个print语句中,你可以清楚地告诉它永远不会返回:即使你让应用程序暂时停止。
我仔细研究了网络 - 徒劳地寻找可能导致这种情况发生的原因。看一下1.8.0的发行说明,看起来好像所有需要做的就是从使用库中包含的先前方法切换到新的方法。
是否有人对应用程序在按下制表符键时崩溃的原因有任何见解 - 授予后面的代码如上所示? Perhas有人至少可以指出我正确的方向吗?
我得出的结论很可能错过了一些重要的事实。
答案 0 :(得分:1)
事实证明我已经设法有点傻了!
每当我创建应用程序 - 特别是游戏 - 即使我使用像 LibGDX 这样的库,我也喜欢继续创建一个独立的线程来处理游戏逻辑。这使我对整个应用程序有了更多的控制 - 无论是极其频繁地进行渲染还是反复渲染,反之亦然。或者反过来。
按照我的逻辑,提供的问题代码......
if(Gdx.input.isKeyJustPressed(Keys.TAB))
Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
...我决定放入tick
方法。由于那是在一个单独的线程中, LibGDX 可能感觉有点遗漏。
根据我的理解, LibGDX 处理ApplicationAdapter
的{{1}}方法中的所有逻辑。这就是它评估所有用户操作的地方,并确保它们不会与其他各种不同组件发生冲突。
由于上述原因 - 当我决定将“全屏逻辑”放在一个单独的线程中时, LibGDX 崩溃了。哦,至少它现在有效 - 也就是说,将上述代码放在 LibGDX 的render
的{{1}}方法中!