在libgdx中捕获onClose窗口事件

3
我正在开发一个libgdx游戏,希望使用首选项存储玩家的进展和偏好设置。
到目前为止还不错。在Android中,有很好的事件可以更新首选项并将它们存储到文件系统中。
我想知道在桌面端是否存在类似的东西。也就是说,是否有任何方法可以添加侦听器以便用户关闭窗口时能够及时刷新数据。
这样,我就能在应用程序关闭之前刷新数据了。
或者还有其他方法吗?

如果应用程序崩溃了怎么办?为什么不在每次更改后刷新呢? - noone
1
首先,我建议在更改和玩家进度时使用flush()偏好设置,具体取决于游戏设计,也许如果他到达特殊的“安全点”,或者如果他在菜单中按下“安全”按钮。 对于如何在关闭窗口时刷新它的问题:不应该在窗口关闭时调用dispose()吗?在那里,您可以简单地flush()更改。 - Robert P
@Springrbua,啊,你说得对。我刚忘了我的主游戏类实现了ApplicationListener接口,它有dispose方法。 - Juan Chô
我把它作为答案添加了 xD - Robert P
1个回答

4
您的主要游戏实现了 ApplicationListener,其中包含 dispose() 方法。如果您关闭窗口或退出游戏,则会调用此方法。因此,您可以在 dispose() 方法中简单地 flush() 您的 Preferences。 但正如 @noone 所说,您还应该考虑到您的应用程序可能会因某种原因而崩溃。如果发生这种情况,dispose() 将不会被调用。对于 Soundoptions 或 Graphic settings 等 Preference 来说,这不是太大的问题,因为您可以很容易地在下一次设置它们,但如果玩家失去了进度,他会感到沮丧。因此,我建议考虑使用以下方法之一:
  1. 每次更改都进行 flush()。您可以确保一切都已保存。对于进度,您可以在某些特殊事件/安全点上进行 flush()
  2. 每隔五分钟进行一次 flush()
  3. 在菜单中按下 KeyEvent/Button 时进行 flush()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接