java - 我的世界如何自动保存并同时继续处理游戏?

标签 java c++ iostream save

好的伙计们。我知道您可以使用 ostream 和 istream 读取文件和排序(至少在 C++ 中)。我的问题是游戏 >Minecraft< 能够生成 block (游戏世界),在玩家与游戏交互时保存它们并在需要时加载它们。我所说的互动是指 build 、采矿、行走、死亡(经常安静)。 这一切怎么可能??您如何修改每 2 秒保存一次的日期?我应该打开一个流而不是关闭它,还是有一个特殊的函数或方法可以做到这一点? 谢谢!!

最佳答案

我不知道 Minecraft 具体是如何做到的,但您可以通过多种方式实时获得一致的快照。例如。

  • 如果修改器试图在快照期间更改数据结构的相关部分,则数据结构可以创建数据结构相关部分的卷影拷贝。

  • 所有节点都可以被锁定,以防止 mutator 在快照进行时更改它们。如果修改器试图获取节点上的锁,这可能会导致快照进程将该节点移到队列的前面......这样修改器只会被短时间阻塞。

  • 他们可能只是将快照创建过程实现为增量式的,并且典型的增量可能足够快,用户通常不会注意到更改器会暂停一小段时间。 (我的猜测是,任何小于 1/10 秒的时间都不会引起注意……除非它产生明显的“视觉伪像”。即便如此,Minecraft 的渲染质量也不会让用户过分担心。至少,这是我从观看其他人玩游戏时观察到的...)


但有一件事是肯定的。实现很可能是非常 Minecraft 特定的和手动调整的。没有通用的 Java 库类可以神奇地完成这种事情。我怀疑他们是否正在使用 IOStreams 的 Java 等价物来执行此操作。

关于java - 我的世界如何自动保存并同时继续处理游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17288011/

相关文章:

java - 如何打开新的 Web 浏览器而不是在单击与父窗口具有单独的 http session 的链接时弹出

java - 试图理解隐式 super 接口(interface)

java - 使用类名从 Java Vector 检索对象

c++ - Qt:QMap中 vector 的迭代器

c++ - 可以在全局对象构造函数中进行打印/记录还是未定义的行为?

c++ - C++ 格式化库通常会回退到 *sprintf 进行数字格式化吗?

c++ - 可以打印罗马数字而不是 int 吗?

java - 如何查找附加到数组的特定索引的值

php - Winsockets - 主体之前和/或之后的奇怪字符

c++ - 找不到调试符号