2014-09-19 69 views
3

我一直想知道的战略游戏,如帝国的星际争霸和年龄怎么这么准确地节省了游戏。当你加载一个游戏时,你会意识到即使是游戏中单位的投射物也会被保存。不仅如此,甚至可以正确加载弹丸(例如从某个单元发射的导弹)的方位。如果一个单位正在行走或移动,它也被准确加载。这些策略游戏的开发者能够重新构建确切的游戏状态。如何星际争霸(或策略游戏)游戏保存

这就是我的想法。游戏中的每一个单位(包括投射物)都保存为一个对象。

这些对象中的每一个都包含诸如当前在地图上的位置,当前方向(例如,面向北方的多少度)等的信息。

我在假设策略游戏如何保存游戏时是否正确?还是有更有效的方法来保存游戏状态?

回答

-3

我猜的是他们退出程序的主循环(暂停游戏),然后直接将内存状态保存到文件中。

+0

答案不应该是一个猜测。用事实支持你的论点。 – tod 2014-09-21 11:57:47

+0

猜猜什么?与游戏同时使用的2GB内存相比,已保存的游戏可能为100KB。要么他们使用压缩率为0.005%的压缩算法,要么你的假设是不正确的,并且保存游戏不是休眠。 – icza 2015-03-02 16:35:50

+0

大部分内存都由纹理和其他图形相关数据使用。保存单元状态 - 我想它作为结构的链表将需要更少的空间。 – Nuclear 2015-04-15 21:45:37

0

星际争霸做它不同。它可以保存在游戏中发生的每一个动作。

当你再加载一个重播时,它必须经过所有的动作,就好像你在哪里玩它一样,以获得最新的游戏状态。基本它会再次模拟游戏。

+0

您的解决方案是在游戏重播。怎么样节约游戏? '它会再次模拟游戏'我相信它可以保存每一个动作来重建游戏重播,但是我怀疑它会完全根据保存的动作重新运行游戏。永远记得有一个随机性,比如单位的伤害。除了保存这些动作之外,我相信它还保存了可以随机更改的值。最重要的是,没有任何游戏会重新运行整个事情来恢复上一次的游戏状态。怀疑任何人都这样做。它大量地将游戏状态保存在堆栈/堆栈中。 – user3437460 2015-11-23 16:10:07

+0

考虑以行动形式出现的随机值。任何会改变脚本结果的东西。 – CoderPi 2015-11-23 16:11:21

+0

在星际争霸多人游戏中,如果你想保存/玩一个游戏,这是通过“重播” – CoderPi 2015-11-23 16:12:17