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.