Pygame Sprites (Klassen und Objekte)¶
Lernziele
- Sprites (Klassen, Baupläne)
- Sprites/Objekte erstellen
- Attribute/Eigenschaften
- Gruppen
Das Sprite¶
Ein Pygame-Sprite ist etwas ganz Neues für dich. Ein Sprite ist ein Grafikobjekt, das von der Grafikhardware über das Hintergrundbild bzw. den restlichen Inhalt der Bildschirmanzeige eingeblendet wird. Die Positionierung wird dabei komplett von der Grafikhardware erledigt. Sprites kann man einfach bewegen, animieren und das Programmieren von Kollisionen mit anderen Objekten ist auch sehr vereinfacht. Sprites werden in sogenannten Klassen (Baupläne) programmiert.
Klassen: Beispielerklärung¶
Eine Klasse kannst du dir als LEGO-Bauanleitung vorstellen:
Die Anleitung sagt dir, wie das Objekt aussieht und wie du es zusammensetzt.
Es ist nur ein Bauplan für das Legomännchen.
Vor allen Eigenschaften des Objekts steht ein self.
Diese Eigenschaften werden auch Attribute genannt.
Die Bauanleitung selbst bewirkt noch gar nichts.
Wenn du ein Legomännchen in dein Programm einbauen möchtest,
dann musst du es anfordern und in einer Variablen speichern.
Dies geschieht meistens bei den «globalen Initialisierungen».
Hier werden z.B. drei Objekte mit Hilfe von Variablen
(player1, player2 und player3) definiert,
die jeweils einem Legomännchen entsprechen.
Klassen/Sprites in Python¶
Arbeite die folgenden Punkte durch.
-
Lade die Datei "einf_pygame_02_sprite.zip" herunter und entpacke das ZIP-File.
-
Starte das Programm. Wenn du das Programm startest, siehst du an irgendeiner Stelle des Fensters ein farbiges Rad.
-
Schau dir den Bauplan der Klasse
Playeran. Welche Eigenschaften hat ein Objekt dieser Klasse im Programm? Zähle sie auf und erkläre für was sie stehen könnten? -
class Player(py.sprite.Sprite)ist nur ein Bauplan für ein Grafikobjekt der KlassePlayer. Wo im Programm wird die Bauanleitung für denPlayeraufgerufen? D.h., wo wird ein Objekt der KlassePlayererstellt? Wie heisst die Variable, die das erstellte Grafikobjekt repräsentiert?
Gruppen¶
Wenn man viele Sprites (Gegner, Schüsse, Hindernisse) hat, dann ist es hilfreich, wenn man sie gruppieren kann. Gruppen kann man sich wie Listen vorstellen.
-
Wir arbeiten zuerst nur mit einer Gruppe, der wir alle Objekte hinzufügen. Die Gruppe heisst
Sie soll, wie der Name schon sagt, alle zu zeichnenden Sprites enthalten. Ist die Gruppe einmal erstellt, können wir den Spieler player1 der Gruppe hinzufügen:all_spritesund wird wie folgt definiert: -
Wir möchten nun alle Sprites, welche in der Gruppe
all_spritessind, zeichnen. Wo geschieht das im Programm-Code? -
Erstelle einen weiteren Spieler mit den Namen
player2und stelle ihn auf dem Bildschirm dar. -
Ändere das Bild von
player2. Du musst also das Attributimagevonplayer2ändern (player2.image = ....). Du findest das Bild im Ordner "res" mit dem Dateiname "disco.png".Hinweis: Nach dem Ändern des Bildes, muss auch das Rechteck-Attribut des Objekts
player2aktualisiert werden (player2.rect = ...).
Weitere Aufgaben¶
-
Bediene
player1undplayer2mit den Tasten (z.B.player1mit den Pfeiltasten undplayer2mit den wsad-Tasten).Wichtig Änderung des Programmcodes:
Die Abfrage der Tasten ist absichtlich in die Funktion
key_handler()ausgelagert worden, damit die Hauptschleife übersichtlich bleibt. Sie wird in der Hauptschleife bei jedem Durchgang aufgerufen. Somit hat sich unser Programmaufbau folgdermassen verändert (siehe Bild): -
Füge der Klasse
Player, also dem Bauplan, eine zusätzliche Eigenschaftself.step_sizehinzu. Sie soll eine Zufallszahl von 1 bis 10 sein. Der Spieler soll sich beim entsprechenden Tastendruck genau um die Anzahl Pixel bewegen, die in der Eigenschaft/dem Attributstep_sizegespeichert ist. -
(s) Wir wollen nun ein komplett anderes Sprite Objekt erstellen. Gehe dazu die folgenden Punkte durch.
- Erstelle eine neue Sprite-Klasse (Bauplan) mit dem Namen
Bullet. - Ein Bullet Objekt soll wie in diesem BILD aussehen. Lade es herunter und füge es in der Klasse, das heisst bei der Bauanleitung, ein.
- Ändere beim Bildladen den Befehl
convert()zuconvert_alpha()ab, um den Effekt der Transparenz sichtbar zu machen. - Erstelle ein Objekt der Klasse
Bullet, nenne esplayer3(ich weiss, sehr unkreativ ;)) und füge es irgendwo auf dem Bildschirm ein.
- Erstelle eine neue Sprite-Klasse (Bauplan) mit dem Namen
-
(s) Erweitere das Programm so, dass die Koordinaten von
player3immer der, der Maus entsprechen. - (s) Sorge dafür, dass die Spieler nicht aus dem Fenster laufen können.

