animierte Actors

4. ANIMIERTE ACTORS

 

 

DU LERNST HIER...

 

wie die Spielfiguren während der Bewegung ihr Erscheinungsbild ändern können. Der Benutzer muss den Eindruck haben, dass die Spielfiguren essen, laufen, schwimmen usw. Um dies möglichst einfach zu realisieren, kannst du einem Actor mehrere Sprites zugeordnen, von denen jeweils nur eines sichtbar ist. Die Anzahl der Sprites wird beim Erzeugen des Actors als Parameter angegeben. Die einzelnen Sprites müssen mit einer Indexnummer gespeichert sein.

 

 

MUSTERBEISPIELE

 

 

Beispiel1: Der Pacman macht bei jedem Schritt den Mund auf oder zu
 

Dem Actor pacman werden zwei Sprites pacman_0.gif und pacman_1.gif zugeordnet, die abwechselnd sichtbar sind.

 
 
pacman_0.gif
pacman_1.gif

showNextSprite zeigt jeweils das nächste noch vorhandene Bild. Da nur zwei Sprites vorhanden sind, werden die beiden Sprites abwechselnd sichtbar.

 

Programm:

# Gg4.py
from gamegrid import *

# ------------- class Pacman ---------------------------
class Pacman(Actor):
     def __init__(self):
         Actor.__init__(self, "sprites/pacman.gif", 2)
     def act(self):
          self.move()
          self.showNextSprite()
          if self.getX() == 9:
              self.turn(90)
              self.setHorzMirror(True)
          if self.getX() == 0:
              self.turn(270)
              self.setHorzMirror(False)             
                  
# ---------- main ---------------------------------  
makeGameGrid(10, 10, 60, Color.red)
paki = Pacman()
addActor(paki, Location(0, 0))
show()
doRun()
► In Zwischenablage kopieren

Beispiel 2: Animation mit mehreren Sprites

Dem Actor Head sind drei verschiedene Sprites head_0.png, head_1.png und head_2.png zugeordnet, die periodisch der Reihe nach angezeigt werden. Mit einem GameGrid mit der Zellengrösse 1 Pixel erreicht man fliessende Figurenbewegungen.

getX() gibt die aktuelle Koordinate der Mittelpunktes des Bildes zurück. Bei der Fenstergrösse 600x600 Pixel muss der Actor rechts bei 500 und links bei 95 umkehren.

 


Programm:

# Gg4a.py
from gamegrid import *

# ------------- class Head ---------------------------
class Head(Actor):
    def __init__(self):
        Actor.__init__(self, "sprites/head.png", 3)

    def act(self):     
        self.move()         
        self.showNextSprite()
        if (self.getX() > 500) or (self.getX() < 95):
            self.turn(180)        
                  
# ---------- main ----------------------------  
makeGameGrid(600, 600, 1, Color.yellow)
addActor(Head(), Location(135, 180))
addActor(Head(), Location(300, 450))
show()
doRun()
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Um einen Actor während der Bewegung zu animieren, kannst du ihm mehrere Sprites zuordnen, die abwechselnd sichtbar sind. Anzahl der Sprites gibst du beim Erzeugen des Actors als Parameter an. Mit showNextSprite() werden die Bilder der Reihe nach angezeigt, nach dem letzten Bild erscheint wieder das erste.

 

 

ZUM SELBST LÖSEN

 

1.

Dem Actor Fish() werden zwei Sprites fish_0.gif und fish_1.gif zugeordnet.  

Erzeuge im Spielfenster mit dem Hintergrundbild reef.gif drei animierte Fish-Actors an den Positionen (0, 0), (5, 0) und 1, 2) und lasse sie so wie im Beispiel 1 von Zelle zur Zelle bewegen. Das Du siehst hier den Vorteil des Objektorientierte Programmierens: Wenn du einmal einen Actor mit seiner Bewegung und Animation definierst, kannst du beliebig viele davon erzeugen.



 

2.
Dem Actor Creature() werden zwei Sprites creature_0.gif
creature_1.gif
zugeordnet. In der Methode act() soll der Actor nur sein Sprite-Bild wechseln.
 

Erzeuge in einem Spielfeld mit 8 horizontalen und 8 vertikalen Zellen der Grösse 50 in jeder Zelle einen Actor. Dazu verwendest du zwei for-Schleifen:

for y in range(8):
    for x in range(8):
        addActor(Creature(), Location(x, y))