Вам нужно специально стереть круг, прежде чем снова его стереть. В зависимости от сложности вашей сцены, вам, возможно, придется попробовать разные методы. Как правило, у меня есть «фоновая» поверхность, которая перетаскивает экран каждый кадр, а затем перетаскивает спрайты / другие поверхности на их новые позиции (блики в Pygame очень быстрые, поэтому даже на довольно больших экранах у меня не было проблемы со скоростью делают это). Для вашего кода выше достаточно просто использовать surface.fill(COLOR)
, где COLOR
- ваш цвет фона; например, (255 255 255) для белого:
# ...
screen = pygame.display.set_mode((640,400),0,32)
backgroundColor = (255,255,255)
# ...
while True:
# ...
screen.fill(backgroundColor)
screen.blit(circle,(pygame.mouse.get_pos()[0],100))
pygame.display.update()
pygame.time.delay(10)
Редактировать в ответ на ваш комментарий: это можно сделать более объектно-ориентированным способом.
Вам понадобится фоновая поверхность, связанная с вашим экраном (у меня обычно есть класс Display или Map (в зависимости от типа игры), который это делает). Затем сделайте ваш объект подклассом pygame.sprite
. Для этого требуется наличие атрибутов self.image
и self.rect
(изображение - это ваша поверхность, а прямоугольник - это Pygame.rect с местоположением). Добавьте все свои спрайты к объекту pygame.group
. Теперь в каждом кадре вы вызываете метод draw
для группы и после обновления отображения (т. Е. С помощью pygame.display.update ()) вызываете метод clear
для группы. Этот метод требует, чтобы вы предоставили как поверхность назначения (т. Е. screen
выше), так и фоновое изображение.
Например, ваш основной цикл может выглядеть примерно так:
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
circle.rect.center = (pygame.mouse.get_pos()[0],100)
circleGroup.draw(screen)
pygame.display.update()
circleGroup.clear(screen, backgroundSurface)
pygame.time.delay(10)
См. документацию о классах Sprite и Group для получения дополнительной информации.