возможно ли отделить фон от переднего плана, поэтому мне нужно перерисовывать только передний план для каждой итерации?
Краткий ответ
Нет, потому что Pygame делаетне имеют таких понятий, как фон и передний план.Есть только Surface
с, и дисплей, который является своего рода специальной поверхностью (соответствует тому, что показано на экране).
Так что, да, это возможно, но ваша обязанность - реализовать фон и передний планsystem.
Как обычно выполняется анимация
Обычный подход заключается в отслеживании анимации (все круги на переднем плане в вашем случае).Под «отслеживать» я имею в виду запоминание их Rect
в пиксельных координатах.
Таким образом, вам не нужно перерисовывать все фоновое изображение, а только часть, «скрытую» объектом.И затем вы можете перерисовать объект в обновленной позиции, создав анимацию.
Основы этого подхода более подробно описаны в этом руководстве по пигмеям .
В вашем случае, Я бы сделал:
- Нарисуйте все линии фона на отдельном
Surface
, называемом background
. - Blit целых
background
на дисплее. - Запустить основной цикл.Каждая итерация:
- Зацикливайте анимированные объекты, чтобы удалить их.Под «удалением» я подразумеваю повторное мигание
background
на дисплее, но вы можете перетаскивать только часть экрана, покрытую объектом (это занимает меньше времени, чем повторная подсветка всего background
). - Обновитепозиции анимированных объектов, возможно удаление или добавление новых объектов.
- Повторно зациклите анимационные объекты, чтобы нарисовать их на новых позициях.