【问题标题】:Saving multithreaded game保存多线程游戏
【发布时间】:2013-04-29 19:02:35
【问题描述】:

我用 java 编写了一个 2d 平台游戏,我想知道如何保存游戏。我看了看只是使用 XMLEncoder 或 ObjectOutputStream 序列化整个游戏,但是那些并没有正确保存线程。当我再次开始游戏时,线程没有运行。因此,我尝试在游戏加载后在所有线程上调用 start,但这造成了线程处于无效状态并且游戏开始出现故障的主要问题。将整个游戏写入保存文件的最佳方法是什么。

【问题讨论】:

  • 是否可以保存线程的状态,然后创建一个新线程,将其状态设置为您保存的内容,然后启动它?很难在没有一点代码甚至提示问题所在的情况下给出一个好的建议
  • 好吧,因为它有 1000 行,所以很难发布代码,但是如果我创建了一个新线程,那么如果我创建一个新线程,它就不会在其执行的同一部分.
  • 您能否使用线程组或跟踪并保存不同线程之间的所有依赖关系?

标签: java multithreading save


【解决方案1】:

保存游戏很少会像在退出/保存时将所有对象完全保存在内存中一样简单,然后再将它们加载回其确切状态。

您更有可能需要/想要创建一个数据结构来表示您的游戏状态,然后将其写入磁盘。多线程不太可能是您的主要关注点。当您加载游戏状态时,您需要重新启动这些线程。

考虑到许多游戏通过菜单保存/加载。如果您的游戏以启动画面或至少一个主菜单开始,那么您无论如何都不想在启动时从它们的确切状态加载对象。找到您需要的最小重要元素,以重构关于游戏状态的所有重要内容并将其保存到磁盘。游戏的大部分状态都可以从非常少量的数据中隐式重建。

遗憾的是,如何保存/加载游戏的确切方法在 Q/A 网站上并不容易回答,因为它在很大程度上取决于您使用的确切数据结构和游戏的整体性质。

【讨论】:

  • 对不起,我帮不上忙;对于您的问题,确实没有一种万能的解决方案。
【解决方案2】:

您应该只序列化您的业务领域数据,而不是线程。重新加载数据时需要再次创建线程。假设您的域类是可序列化的,ObjectOutputStream 就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多