Программа рисования на Python - отменить и повторить
В настоящее время я работаю над созданием программы рисования с использованием Python и Pygame. В настоящее время у меня проблемы с созданием функции отмены / повтора в программе. Я думал о том, чтобы сохранить изображение холста после того, как пользователь отпустит мышь, но я не уверен, нужно ли сохранять отдельные изображения во временной папке, которая удаляется после закрытия программы., Я также читал, что этот метод может повлиять на производительность программы, поэтому мне интересно, есть ли другие методы, которые будут работать более эффективно. Спасибо.
2 ответа
Запись копии в файл звучит немного тяжеловесно, нужно ли ее отменять неограниченно? Я бы предложил использовать что-то вроде pythons collection.deque в качестве кольцевого буфера для сохранения последних N модификаций, это избавило бы вас от необходимости беспокоиться об очистке и дисковом хранилище. Если создание полных снимков каждый раз приводит к значительному снижению производительности, вам может понадобиться ограничить сохраненную сохраненную область определенным ограничивающим прямоугольником на основе того, что было последним действием, выполненным пользователем.
Мое предложение состоит в том, чтобы иметь буфер последних выполненных операций. Каждая операция будет состоять из спрайта и позиции, в которой она размещена.
Вы будете рисовать холст, а также все спрайты из этого буфера. Когда у вас есть много спрайтов в буфере, вы можете переместить самый старый на холст, тем самым экономя память.
Сама отмена была бы довольно легкой. Просто удалите последний спрайт, который был добавлен.
Повторить будет немного сложнее. Поскольку вместо удаления у меня будет указатель, который указывает на последний спрайт, который я нарисую. Если будет добавлено новое действие, только тогда я удаляю все спрайты, которые были "невидимыми".