好的伙计们。我知道你可以使用ostream和istream来读取文件和排序(至少在C ++中)。我的问题是游戏> Minecraft<能够生成块(游戏世界),保存它们并在需要时加载它们,同时玩家与游戏进行交互。通过互动我的意思是建筑,采矿,走路,死亡(经常安静)。 这一切怎么可能?你怎么能修改每2秒保存一次的日期?我应该打开一个流而不是关闭它,还是有一个特殊的功能或方法来做到这一点? 谢谢!
答案 0 :(得分:1)
我不知道Minecraft是如何做到的,但你可以通过各种方式实时获得一致的快照。例如。
如果mutator尝试在快照期间更改数据结构,数据结构可能会创建数据结构相关部分的卷影副本。
可以锁定所有节点,以防止mutator在快照进行过程中更改它们。如果mutator尝试获取节点上的锁,这可能导致快照进程将节点移动到队列的前面...这样mutator只会在短时间内被阻塞。
他们可能只是简单地将快照创建过程实现为增量,并且典型的增量可以足够快,以至于用户通常不会注意到mutator在短时间内暂停。 (我的猜测是,任何不到1/10秒的东西都会变得不明显......除非它产生一个明显的“视觉神器”。即使这样,Minecraft的渲染质量也是如此,用户可能不会过分担心。至少,这是我观察其他人玩的观察......)
但有一件事是肯定的。实施可能非常具有Minecraft特性和手动调整。没有通用的Java库类可以神奇地做这种事情。我怀疑他们是否正在使用IOStreams的Java等价物。
答案 1 :(得分:0)
我并不特别了解Minecraft或Java,但通常的方法是使用内存映射文件:
mmap
(在Unix上)和CreateFileMapping
(Windows)。