Обновление только переднего плана - PullRequest
0 голосов
/ 03 июля 2019

Я делаю анимацию с Pygame. В начале анимации я рисую фон, состоящий в основном из линий. Затем для каждой итерации я рисую круги в разных позициях на основе данных, которые я собирал ранее. В настоящий момент для каждой итерации я очищаю весь экран с заливкой перед тем, как нарисовать текущее изображение для временного шага анимации. Это означает, что я также должен перерисовать весь фон снова. Итак, мой вопрос, возможно ли отделить фон от переднего плана, поэтому мне нужно перерисовывать только передний план для каждой итерации?

1 Ответ

0 голосов
/ 03 июля 2019

возможно ли отделить фон от переднего плана, поэтому мне нужно перерисовывать только передний план для каждой итерации?

Краткий ответ

Нет, потому что Pygame делаетне имеют таких понятий, как фон и передний план.Есть только Surface с, и дисплей, который является своего рода специальной поверхностью (соответствует тому, что показано на экране).
Так что, да, это возможно, но ваша обязанность - реализовать фон и передний планsystem.

Как обычно выполняется анимация

Обычный подход заключается в отслеживании анимации (все круги на переднем плане в вашем случае).Под «отслеживать» я имею в виду запоминание их Rect в пиксельных координатах.
Таким образом, вам не нужно перерисовывать все фоновое изображение, а только часть, «скрытую» объектом.И затем вы можете перерисовать объект в обновленной позиции, создав анимацию.

Основы этого подхода более подробно описаны в этом руководстве по пигмеям .

В вашем случае, Я бы сделал:

  1. Нарисуйте все линии фона на отдельном Surface, называемом background.
  2. Blit целых background на дисплее.
  3. Запустить основной цикл.Каждая итерация:
    1. Зацикливайте анимированные объекты, чтобы удалить их.Под «удалением» я подразумеваю повторное мигание background на дисплее, но вы можете перетаскивать только часть экрана, покрытую объектом (это занимает меньше времени, чем повторная подсветка всего background).
    2. Обновитепозиции анимированных объектов, возможно удаление или добавление новых объектов.
    3. Повторно зациклите анимационные объекты, чтобы нарисовать их на новых позициях.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...