【发布时间】:2014-01-16 14:38:43
【问题描述】:
我目前正在使用 python 和 pygame 创建一个绘图程序。我目前无法在程序中创建撤消/重做功能。我正在考虑这样做的方式是在每次用户释放鼠标后保存画布图像,但我不确定是否必须将单个图像保存在程序关闭后删除的临时文件夹中.我还读到这种方法会影响程序的性能,所以我想知道是否还有其他方法可以更有效地工作。谢谢你。
【问题讨论】:
标签: python pygame paint undo redo
我目前正在使用 python 和 pygame 创建一个绘图程序。我目前无法在程序中创建撤消/重做功能。我正在考虑这样做的方式是在每次用户释放鼠标后保存画布图像,但我不确定是否必须将单个图像保存在程序关闭后删除的临时文件夹中.我还读到这种方法会影响程序的性能,所以我想知道是否还有其他方法可以更有效地工作。谢谢你。
【问题讨论】:
标签: python pygame paint undo redo
我的建议是对已完成的最后操作进行缓冲。每个操作都将包含一个精灵,以及放置它的位置。
您将绘制画布以及该缓冲区中的所有精灵。当缓冲区中有很多精灵时,可以将最旧的精灵粘贴到画布上,从而节省内存。
撤消本身相当容易。只需删除最后添加的精灵。
重做会稍微困难一些。因为我没有删除,而是有一个指针,它指向我将绘制的最后一个精灵。如果要添加一个新动作,那么我只会删除所有“不可见”的精灵。
【讨论】:
将副本写入文件听起来有点笨拙,是否需要无限撤消?我建议使用 pythons collections.deque 之类的东西作为循环缓冲区来保存最后 N 次修改,这样您就不必担心清理和磁盘存储。如果每次拍摄完整快照对性能而言非常明智,您可能需要考虑根据用户最后执行的操作将每个保存的区域限制为特定的边界框。
【讨论】: