Zum Inhalt

Animierte Bilder / Kostümwechsel

Lernziele

  • Animierte Bilder
  • Kostümwechsel

Einführung

Um ein Sprite-Bild zu animieren, müssen wir, ähnlich wie in Scratch, die Bilder in einem bestimmten Rhythmus ständig wechseln. Dazu müssen die Bilder (also die verschiedenen Kostüme) zuerst geladen werden, damit der Kostümwechsel durchführt werden kann.

Kostümwechsel

Kostümwechsel - Animation

Mit Pygame geschieht das in den folgenden Schritten (=> Hier die Vorlage zum Downloaden):

  1. Wir laden die Bilder mit Hilfe einer globalen Funktion load_images(). In dieser Funktion werden die Bilder geladen und in eine Liste animation als Pygame-Bilder gespeichert. Mehr Informationen zur Funktion load_images() findest du im Code selber, als Kommentare.

  2. Finde im Code die Stelle, wo die Funktion load_images() aufgerufen wird. Der Aufruf sieht in unserem Beispiel so aus:

    self.animation = load_images("res/","wheel",".gif",6,100,100).
    

    • res/ Pfad zum Ordner, wo die Bilder drin sind.
    • wheel ist der Name der Bilder ohne die Nummerierung.
    • .gif ist der Dateityp der Bilder, also das Bildformat.
    • 6 ist die Anzahl der Bilder, wobei die Nummerierung bei Null beginnt.
    • 100,100 ist die Bildgrösse, auf die Pygames das Originalbild skaliert.
  3. Nachdem alle Bilder mit der Funktion load_images() geladen worden sind, wird die Liste, in der alle Pygame-Bilder drin, sind vom Sprite als Attribut self.animation gespeichert.

  4. Als Nächstes soll das erste Bild angezeigt werden:

    self.image = self.animation[self.costume]
    

    Kostümwechsel

  5. Die Kostüme haben bei Pygames keine Nummern wie bei Scratch. Deswegen definieren wir einen eigenen Zähler für die Kostüme: self.costume = 0.

  6. Nun kommt der letzte Schritt: Die Kostüme müssen regelmässig gewechselt werden.

    Kostümwechsel

    Da der Kostümwechsel eine Fähigkeit ist, welche unsere Player Objekte haben sollen, verwenden wir dazu eine Funktion, die in der Klasse, d.h. im Bauplan selber definiert wird. Die sieht wie folgt aus:

    def update(self):
        self.costume = (self.costume + 1 ) % len(self.animation)
        self.image  = self.animation[self.costume]
    
    • Wenn sie aufgerufen wird, dann wird die Variable self.costume um eins erhöht und Modulo "Anzahl Bilder" gerechnet, damit sie nur bis "Anzahl Bilder - 1" zählt und dann wieder von vorne beginnt.
    • Danach ziehen wir das entsprechende Kostüm aus der Liste an.
  7. Als Letztes muss die soeben definierte Funktion regelmässig aufgerufen werden. D.h. der Aufruf muss in der Hauptschleife erfolgen. Der Funktionsname update() ist ein speziell reservierter Name bei den Sprites. Mit dem Befehl all_sprites.update() werden von allen Sprites in dieser Gruppe die Funktionen update() automatisch aufgerufen.

Weitere Aufgaben

Nun sollst du selber eine neue Klasse erstellen, welche ebenfalls aus Objekten besteht, deren Kostüme ständig geändert werden.

  1. Erstelle eine neue Klasse Coin. Benutze die Klasse Player als Vorlage.

  2. Die Kostüme kannst die HIER herunterladen. Speichere sie im "res" Ordner.

  3. Implementiere den Kostümwechsel und teste es, indem du ein Objekt der Klasse Coin erstellst und es irgendwo auf dem Bildschirm darstellst.

  4. (s) Plaziere das Münzobjekt dort, wo sich die Maus befindet, das Fenster darf es aber nicht verlassen.