加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

撤消/重做功能Java的对象序列化

发布时间:2020-12-15 08:32:34 所属栏目:Java 来源:网络整理
导读:我一直在尝试在我用 Java编写的游戏中实现和撤消/重做系统.我采取的方法是在每次移动后序列化游戏状态.我有一种方法可以将序列化对象保存在堆栈上并访问它们以进行撤消/重做吗? 解决方法 游戏编程与“企业应用程序”编程和“webapp编程”没有多大关系. 所以
我一直在尝试在我用 Java编写的游戏中实现和撤消/重做系统.我采取的方法是在每次移动后序列化游戏状态.我有一种方法可以将序列化对象保存在堆栈上并访问它们以进行撤消/重做吗?

解决方法

游戏编程与“企业应用程序”编程和“webapp编程”没有多大关系.

所以这取决于你正在做什么样的游戏,但你的方法和gaven所以这些票价与游戏状态在“真实”游戏中的保存方式完全无关.性能将非常糟糕,你最终将使用大量的内存和磁盘空间.

像暴雪的魔兽争霸III或微软的帝国时代这样的伟大游戏只会存储重现任何游戏状态所需的用户输入.

这就是他们如何实现超高效的网络传输,即使玩家有数百或数千个对象,这就是他们如何实现微小的保存游戏文件(可用于继续游戏或重放):想要低延迟?简单,只需通过UDP发送玩家的击键和鼠标点击以及这些输入发生的时间.

这与撤消/重做有什么关系?不重要的…

想象一下,自从你的游戏开始以来你有200个用户输入,想要撤消最后一步:你从头开始游戏并输入199个第一个输入.而已.完美的撤消.

当然,您只需在重放这199个步骤时重放逻辑,而无需更新需要更新视图.对于大多数游戏而言,逻辑只占花费总时间的一小部分(大部分时间花在视图中).所以重播这些输入非常快.

去过也做过 :)

现在,如果你想要另一种方式来进行无限制的撤销/重做,那么必须要说一些关于“OO over immutable objects”的内容:我编写了游戏工具编辑器(如地图编辑器),其中包含无限制的撤销/重做.诀窍是只使用不可变对象.然后坚持以前的状态很容易:只是层次结构顶部的对象(‘gamemap239’).

因为你只使用不可变对象,所以“新”游戏地图与之前的游戏地图共享99.9%的对象,因此内存使用率非常低,可以保留大量的状态.

我已经成功地将这个“OO用于不可变对象以实现高效的撤销/重做”,而不是游戏中的商业软件,这真的是一种惊人的技术.

现在它取决于您正在进行的游戏:当然,对于扫雷游戏,您可以使用Swing和常规Java编程技术.但是对于更高级的游戏,常规的Java集合和API以及常规的企业/ webapp / fatclient编程技术根本不会削减它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读