Comment se débarrasser de pygame surfaces?
Dans le code suivant, il n'est pas seulement un cercle sur l'écran à un moment donné dans le temps.
Je tiens à corriger ce pour faire en sorte qu'il ressemble à il ya un seul cercle, au lieu de laisser une tache piste à l'endroit où le curseur de la souris a été.
import pygame,sys
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((640,400),0,32)
radius = 25
circle = pygame.Surface([radius*2]*2,SRCALPHA,32)
circle = circle.convert_alpha()
pygame.draw.circle(circle,(25,46,100),[radius]*2,radius)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.blit(circle,(pygame.mouse.get_pos()[0],100))
pygame.display.update()
pygame.time.delay(10)
OriginalL'auteur lotsofsloths | 2010-02-06
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin spécifiquement pour effacer le cercle avant de vous blit à nouveau. Selon la complexité de votre scène, vous pouvez avoir à essayer différentes méthodes. Généralement ce que je fais est d'avoir un "fond" de surface qu'un blit à l'écran à chaque image, puis blit les sprites/autres surfaces dans leurs nouvelles positions (blits dans Pygame sont très rapides, de sorte que même en assez grand écrans, je n'ai pas eu des problèmes de vitesse de le faire). Pour votre code ci-dessus, il est assez simple d'utiliser
surface.fill(COLOR)
oùCOLOR
est votre couleur d'arrière-plan; par exemple, (255,255,255) pour les blancs:Modifier en réponse à votre commentaire: Il est possible de le faire d'une manière orientée objet.
Vous aurez besoin d'avoir une Surface de fond associé à votre écran (j'ai l'habitude d'avoir un Affichage ou une Carte de classe (selon le type de jeu) qui fait cela). Alors, faites votre objet d'une sous-classe de
pygame.sprite
. Cela exige que vous avezself.image
etself.rect
attributs de l'image de votre surface et le rect être un Pygame.rect avec l'emplacement). Ajouter l'ensemble de vos sprites pour unpygame.group
objet. Maintenant, à chaque image, vous appelez ladraw
méthode sur le groupe et, après la mise à jour de l'affichage (c'est à dire, avec pygame.d'affichage.mise à jour()), vous appelez laclear
méthode sur le groupe. Cette méthode exige que vous fournir à la fois la surface de destination (c'est à dire,screen
ci-dessus) et une image d'arrière-plan.Par exemple, votre boucle principale peut ressembler à ceci:
Voir le la documentation sur le Sprite et des cours de Groupe pour plus d'informations.
OriginalL'auteur Daniel G