Kollisionen von Spielobjekten feststellen
Abschlussbedingungen
Die Funktion colliderect()
liefert True
, wenn zwei Spielobjekte sich berühren.
Ein Beispiel aus dem PGZ Blaster
Die Aktualisierungs-Funktion der Rakete überprüft für jedes einzelne Ufo, ob eine Kollision mit der Raketestattgefunden hat:
def aktualisiere(self):
self.y -= self.geschwindigkeit
if(self.top < 0):
self.aktiv = False
for ufo in spiel.ufos:
if self.colliderect(ufo):
ufo.getroffen()
self.aktiv = False
return
Ein komplettes Programmbeispiel
Wenn Schiff und Ufo sich überlappen, dann wird das Programmfenster schwarz gefüllt, sonst weiß.
Achtung: Dieses Beispiel funktioniert nur, wenn es im selben Ordner liegt wie die PGZ Blaster Dateien!
import pgzrun
WIDTH, HEIGHT = 500, 700
class Schiff(Actor):
def __init__(self):
Actor.__init__(self, 'schiff')
self.bottom = HEIGHT
self.centerx = WIDTH / 2
self.geschwindigkeit = 2
def aktualisiere(self):
if keyboard.left:
self.x -= self.geschwindigkeit
if keyboard.right:
self.x += self.geschwindigkeit
if keyboard.up:
self.y -= self.geschwindigkeit
if keyboard.down:
self.y += self.geschwindigkeit
self.clamp_ip(0, 0, WIDTH, HEIGHT)
schiff = Schiff()
ufo = Actor("ufo", (WIDTH/2, HEIGHT/2))
def update():
schiff.aktualisiere()
def draw():
if schiff.colliderect(ufo):
screen.fill((0, 0, 0))
else:
screen.fill((255, 255, 255))
screen.draw.filled_rect(schiff._rect, "red")
schiff.draw()
screen.draw.filled_rect(ufo._rect, "red")
ufo.draw()
pgzrun.go( )
Zuletzt geändert: Mittwoch, 12. März 2025, 08:44