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