我正在研究如何编写一个支持撤消的绘制程序,并看到很可能命令模式是我想要的。不过,有些事情仍然让我无法理解,我希望有人可以提供一个简单的答案或确认。
基本上,如果我要体现撤消命令的能力,例如在屏幕上标记一个实心圆圈,这是否意味着我需要将圆圈覆盖到内存中的帧缓冲区复制到这个命令对象中?我看不出有任何其他方法可以撤消可能发生的事情,例如,在一堆随机像素颜色上加盖印章。
我听说一种方法只是跟踪前向操作,当执行撤消时,您只需从第 1 步开始并向前拉到撤消前的步骤,但如果您要支持大型操作,这似乎不可行撤消堆栈。
也许解决方案介于您保留每 15-20 个动作的位图并从最后一个“保存”转发开始之间。
有人可以提供有关在这种情况下典型接受的方法是什么的任何见解,或者在命令中保存缓冲区矩形,重做每个动作,或者我完全错过了什么?
更新:很多很好的回应。谢谢大家。我正在从我正在阅读的内容中考虑,我将通过每 N 个操作保存缓冲区来解决此问题,并且当用户发出撤消命令时,从最近保存的缓冲区中重做所有命令。我可以将 N 调整到尽可能高的值,不会明显影响需要响应式撤消的用户体验(以最大限度地减少内存使用),但我怀疑在这一点上没有真正确定,我应该是能够在一帧中执行相当多的动作,这还不算太糟糕。希望这种方法能让我快速确定是否转向另一个方向,而是为需要它的操作保存先前状态的位图矩形。