Kollisionserkennung
In diesem Abschnitt lernst Du, wie man sehr komfortabel abprüfen kann, ob sich Spielfiguren untereinander berühren oder überschneiden.Programm zum Ausprobieren
Gib das folgende Programm ein und drücke solange irgendeine Taste, bis die beiden Raumschiffe zusammenstoßen.
WIDTH = 800
HEIGHT = 600
TITLE = "Spielfigur ändern"
meteorit = Actor("meteorit.png")
meteorit.x = 400
meteorit.y = 200
laser = Actor("laser_ohne_strahl.png")
laser.x=400
laser.y=300
def on_key_down(key):
if key==keys.RIGHT:
laser.x=laser.x+10
elif key==keys.LEFT:
laser.x=laser.x-10
else:
laser.image="laser_mit_strahl.png"
if laser.colliderect(meteorit):
meteorit.image="meteorit_explosion.png"
def draw():
screen.blit("sterne.png",(0,0))
laser.draw();
meteorit.draw()
Die Zeile
if laser.colliderect(meteorit):
sorgt dafür, dass der folgende oder die folgenden (eingerückten) Befehle nur dann ausgeführt werden, wenn die der Laserstrahl mit dem Meteoriten zusammenstößt (kollidiert, engl.: collide). Genau genommen: Wenn die beiden Rechtecke (engl.: rectangle), die die Ränder der Bilder markieren, einander überschneiden.
In Programmierer-Ausdrucksweise: colliderect(…)
ist
dabei also eine Methode eines
Actor
-Objekts und das
Argument in den Klammern ist ein anderes
Actor
-Objekt.
Aufgabe 1: Zwei Meteoriten
Erweitere das Programm so, dass es zwei Meteoriten gibt, die beide mit dem Laser abgeschossen werden können.
Aufgabe 2: Auf Kollisionskurs
Schreibe ein Programm, bei dem ein Meteorit und eine Sonde (sonde.png
) zunächst zufällig
im Spielfenster platziert werden, der Meteorit im linken Fensterdrittel, die Sonde
im rechten Fensterdrittel. Der Meteorit soll einfach stehen
bleiben. Der Spieler soll die Sonde mit den Pfeiltasten
der Tastatur so steuern, dass sie den Meteoriten „rammt“. Wenn das
passiert ist, soll der Meteorit „explodieren“.