Связанный код (изображение) не дает эффекта, который вы описываете. С левой стороны обновления screen
вообще не производятся. На правой стороне, единственное сделанное обновление - screen.fill()
желтого цвета.
Так что гипотетически говоря ...
Программа PyGame может рассматриваться как тип анимации . Во время основного цикла обычно имеется блок для обработки пользовательского ввода, вызовов для обновления позиций экранных объектов и вызовов для обновления, то есть «перекрашивания» экрана.
Каждый «кадр» этой анимации состоит из фона и, как правило, нескольких наложенных объектов. Это могут быть такие вещи, как растровые изображения игрока, боевые растровые изображения, элементы игрового поля, текстовые оценки и статусы и т. Д. Обычно сначала рисуется фон, а затем накладываемые элементы. Как только экран прорисован, движение объектов рассчитывается для следующего дисплея, оно перерисовывается и снова и снова ...
Первая ситуация, которую описывает вопрос, - это ситуация, когда экран обновляется таким образом, что предыдущий «кадр» анимации не был удален, и пользователь видит композицию из предыдущего и текущего отображения.
Во второй ситуации сначала стирается весь экран с screen.fill()
. Таким образом удаляя любой след предыдущего кадра. Это типичная обработка.
Есть еще один способ. Этот метод отслеживает, где был изменен экран, и только конкретная область, которая требует обновления, перекрашивается. Этот подход потенциально может обеспечить гораздо более эффективный цикл ввода-обновления-рисования, поскольку он не перерисовывает элементы, которые не изменились.