Obwohl es nicht sehr effizient scheint, denke ich, dass der einfachste und auch der beste Weg es zu tun ist, alles neu zu zeichnen. In vielen Spielen wird der Bildschirm bei jedem Frame komplett neu gezeichnet, auch ohne 3D-Karten (erinnern Sie sich an die alten Doom-Spiele?). Das Zeichnen einiger Zeilen über einen Hintergrund wird also sehr schnell sein, sogar in Python.
würde ich so etwas vorstellen:
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.
Dieses Skript zeigt zufällige Linien auf einem Hintergrund. Es gibt 10 Frames, jeder Frame dauert eine Sekunde. Zwischen jedem Rahmen wird die erste Zeile aus der Liste der Zeilen entfernt und eine neue Zeile hinzugefügt.
Entfernen Sie einfach die pygame.time.wait und sehen Sie, wie schnell es geht: D.