Die Positionen von Spielobjekten
Üblicherweise werden in der Programmierung die Positionen von Spielobjekten (wie zum Beispiel bei uns von den Ufos) oder von grafischen Elementen wie Kreisen oder Rechtecken entweder durch die x- und y-Koordinaten des Mittelpunktes angegenen, oder von den x- und y-Koordinaten der unteren linken Ecke.
Manchmal interessiert uns beim Programmieren aber nur die y-Koordinate der oberen Kante (um zu prüfen, ob das Ufo das Programmfenster komplett durchquert hat...) oder die x- und y-Koordinaten der Mitte der unteren Kante (um das Schiff zu Beginn des Spiels genau auf der Mitte der Unterkante des Programmfensters zu positionieren)
Das gute an Pygame Zero ist, dass wir diese und noch viele weitere Koordinaten eines Spielobjekts abfragen und auch ändern können.
Die folgenden beiden Grafiken zeigen alle dabei möglichen Koordinaten:
Zwei Beispiele aus dem PGZ Blaster
Hier wird die Unterkante des Schiffs auf die Unterkante des Programmfensters gesetzt. (self.bottom = HEIGHT)
Und die horizontale Mitte auf die Horizontale Mitte des Programmfensters. (self.centerx = WIDTH / 2)
class Schiff(Actor):
def __init__(self):
Actor.__init__(self, 'schiff')
self.bottom = HEIGHT
self.centerx = WIDTH / 2
self.geschwindigkeit = 6
Bei der Aktualisierung des Ufos wird abgefragt, ob dessen Oberkante unter der Unterkante des Programmfensters sich befindet
Mit anderen Worten: Ob das Ufo den Bildschirm komplett überquert hat.
Ist dies der Fall, wird das Ufo inaktiv gesetzt.
if self.top > HEIGHT:
self.aktiv = False
Ein komplettes Programmbeispiel
Dieses Programm gibt entsprechende Textnachrichten aus, wenn Programmfensterränder vom Ufo überschritten wurden.
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 = 6
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
schiff = Schiff()
def update():
schiff.aktualisiere()
def draw():
screen.fill((255, 255, 255))
if schiff.left < 0:
screen.draw.text("linke Bildschirmkante überschritten!",
center=(WIDTH/2, HEIGHT/2 - 20),
fontsize=30,
color="black")
if schiff.right > WIDTH:
screen.draw.text("rechte Bildschirmkante überschritten!",
center=(WIDTH/2, HEIGHT/2 - 20),
fontsize=30,
color="black")
if schiff.top < 0:
screen.draw.text("obere Bildschirmkante überschritten!",
center=(WIDTH/2, HEIGHT/2 + 20),
fontsize=30,
color="black")
if schiff.bottom > HEIGHT:
screen.draw.text("untere Bildschirmkante überschritten!",
center=(WIDTH/2, HEIGHT/2 + 20),
fontsize=30,
color="black")
screen.draw.filled_rect(schiff._rect, "red")
schiff.draw()
pgzrun.go( )