我目前正在使用 python 和 pygame 创建一个绘图程序。 我目前在程序中创建撤消/重做功能时遇到问题。 我考虑这样做的方式是在每次用户释放鼠标后保存画布图像,但我不确定是否必须将单个图像保存在程序关闭后删除的临时文件夹中。 我还读到这种方法会影响程序的性能,所以我想知道是否有任何其他方法可以更有效地工作。 谢谢。
副本写入文件听起来确实有点沉重,是否需要无限撤消?我建议使用 pythons collections.deque 之类的东西作为循环缓冲区来保存最后 N 次修改,这将使您不必担心清理和磁盘存储。如果每次拍摄完整快照在性能方面都非常明智,则可能需要根据用户执行的最后一个操作将每个保存的区域限制为特定的边界框。
我的建议是有一个已经完成的最后操作的缓冲区。每个操作将包含一个精灵,以及一个放置位置。
您将绘制画布以及该缓冲区中的所有精灵。当您在缓冲区中必须使用许多精灵时,您可以将最旧的精灵布料到画布上,从而节省内存。
撤消本身将相当容易。只需删除添加的最后一个子画面即可。
重做会稍微困难一些。因为我不会删除,而是有一个指针,指向我将绘制的最后一个精灵。如果要添加新动作,只有这样我才能删除所有"不可见"的精灵。