2010-11-25 40 views
0

J'utilise pygame pour créer une petite scène. En ce moment, je travaille avec des lignes.Python (pygame): Comment supprimer une ligne?

J'ai un tableau de lignes qui sont dessinées à l'écran et quand une ligne est supprimée du tableau, je voudrais que la ligne disparaisse de l'écran.

Le problème que j'ai trouvé est que la ligne est dessinée sur l'écran et reste statique. Je ne peux pas trouver un moyen de réinitialiser l'écran (j'utilise un JPEG comme arrière-plan).

Existe-t-il un moyen de supprimer une ligne tracée de l'écran?

Merci

Répondre

1

Si vous utilisez screen.fill ([0,0,0]) il remplira en arrière-plan (ou tout ce que vous avez défini comme votre arrière-plan).

Ceci effacera toutes les lignes tracées sur l'image, supprimant essentiellement tout élément dessiné sur l'arrière-plan.

0

Vous devrez probablement exécuter la commande pour mettre à jour l'affichage, comme expliqué dans the documentation. La commande de mettre à jour la surface d'affichage complet est:

pygame.display.update() 

Il est possible de passer un argument à la fonction à ne mettre à jour la partie requise, ce qui serait plus efficace, mais sans le code complet je ne peux pas vous dire quel serait cet argument.

4

Bien que cela ne semble pas très efficace, je pense que le plus simple et aussi le meilleur moyen de le faire est de tout redessiner. Dans de nombreux jeux, l'écran est entièrement redessiné à chaque image, même sans cartes 3D (souvenez-vous des anciens jeux Doom?). Donc dessiner quelques lignes sur un fond sera très rapide, même en python.

j'imagine quelque chose comme ça:

import pygame 
import random 

SCREEN_WIDTH = 320 
SCREEN_HEIGHT = 200 

class Line(object): 
    def __init__(self, start_pos, end_pos, color, width): 
     object.__init__(self) 
     self.start_pos = start_pos 
     self.end_pos = end_pos 
     self.color = color 
     self.width = width 

def CreateRandomLine(): 
    rnd = random.randrange 
    start_pos = (rnd(SCREEN_WIDTH), rnd(SCREEN_HEIGHT)) 
    end_pos = (rnd(SCREEN_WIDTH), rnd(SCREEN_HEIGHT)) 
    color = (rnd(255), rnd(255), rnd(255)) 
    width = rnd(10) + 1 
    return Line(start_pos, end_pos, color, width) 

def DrawScene(screen_surface, background_image, lines): 
    screen_surface.blit(background_image, (0, 0)) 
    for line in lines: 
     pygame.draw.line(screen_surface, line.color, \ 
         line.start_pos, line.end_pos, line.width) 

pygame.init() 
screen_surface = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) 
background_image = pygame.Surface(((SCREEN_WIDTH, SCREEN_HEIGHT))) 
background_image.fill((200, 100, 200)) # I kinda like purple. 
# Alternatively, if you have a file for your background: 
# background_image = pygame.image.load('background.png') 
# background_image.convert() 
lines = [] 
for i in range(10): 
    lines.append(CreateRandomLine()) 

for frame_id in range(10): 
    del lines[0] # Remove the oldest line, the one at index 0. 
    lines.append(CreateRandomLine()) # Add a new line. 
    DrawScene(screen_surface, background_image, lines) 
    pygame.display.flip() 
    pygame.time.wait(1000) # Wait one second between frames. 

Ce script affiche des lignes aléatoires sur un arrière-plan. Il y a 10 images, chaque image dure une seconde. Entre chaque image, la première ligne est supprimée de la liste des lignes et une nouvelle ligne est ajoutée.

Supprimez simplement le fichier pygame.time.wait et voyez à quelle vitesse cela se passe: D.