Vous devez effacer spécifiquement le cercle avant de le recommencer. En fonction de la complexité de votre scène, vous devrez peut-être essayer différentes méthodes. Généralement ce que je fais est d'avoir une surface "arrière-plan" qui blit à l'écran chaque image puis blit les sprites/autres surfaces dans leurs nouvelles positions (les blits dans Pygame sont très rapides, donc même dans des écrans assez grands je n'ai pas eu problèmes de vitesse en faisant cela). Pour votre code ci-dessus, il suffit simplement d'utiliser surface.fill(COLOR)
où COLOR
est votre couleur de fond; par exemple, (255,255,255) pour le blanc:
# ...
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)
Modifier en réponse à votre commentaire: Il est possible de le faire d'une manière plus orientée objet.
Vous aurez besoin d'une surface de fond associée à votre écran (j'ai généralement une classe Display ou Map (selon le type de jeu) qui fait cela). Ensuite, faites de votre objet une sous-classe de pygame.sprite
. Cela nécessite que vous ayez les attributs self.image
et self.rect
(l'image étant votre surface et le rect étant un Pygame.rect avec l'emplacement). Ajoutez tous vos sprites à un objet pygame.group
. Maintenant, chaque image, vous appelez la méthode draw
sur le groupe et, après avoir mis à jour l'affichage (par exemple, avec pygame.display.update()), vous appelez la méthode clear
sur le groupe. Cette méthode nécessite que vous fournissiez à la fois la surface de destination (c.-à-d. screen
ci-dessus) et une image d'arrière-plan.
Par exemple, votre boucle principale peut ressembler à ceci:
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)
Voir la documentation sur les classes Sprite et groupe pour plus d'informations.
Cette méthode fonctionne et est efficace, mais y a-t-il une approche plus orientée objet? J'ai l'intention d'en faire un objet de classe, donc je me demandais s'il y avait une autre façon d'utiliser screen.fill (bgColor). – lotsofsloths