Pygame-Tutorial

Aus Spieleprogrammierer-Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
[unmarkierte Version][gesichtete Version]
(Überblick)
(Die Animation-Klasse)
Zeile 772: Zeile 772:
  
 
<sourcecode lang=python line start=5>
 
<sourcecode lang=python line start=5>
 +
# Die Klasse kümmert sich um eine einfache Animation:
 
class Animation(object):
 
class Animation(object):
 
     def __init__(self, image, startX, startY, num, width, height, duration):
 
     def __init__(self, image, startX, startY, num, width, height, duration):
 +
        # Die Surface speichern,
 +
        # alle Einzelbilder müssen in einer Reihe liegen.
 
         self.__image = image
 
         self.__image = image
 +
       
 +
        # Dazu müssen wir wissen, an welcher Position die Frames beginnen,
 +
        # wie viele Frames die Animation hat,
 +
        # sowie die Breite und Höhe der Animation.
 
         self.__startX = startX
 
         self.__startX = startX
 
         self.__startY = startY
 
         self.__startY = startY
Zeile 780: Zeile 787:
 
         self.__width = width
 
         self.__width = width
 
         self.__height = height
 
         self.__height = height
 +
       
 +
        # Und natürlich nach welchem Zeitraum wir den nächsten Frame anzeigen sollen.
 
         self.__duration = duration
 
         self.__duration = duration
 
          
 
          
 +
        # Die aktuelle Zeit und den aktuellen Frame speichern wie ebenfalls.
 
         self.__time = 0
 
         self.__time = 0
 
         self.__current = 0
 
         self.__current = 0
Zeile 790: Zeile 800:
 
Das Rendern der Animation erledigen wir in einer Zeile:
 
Das Rendern der Animation erledigen wir in einer Zeile:
  
<sourcecode lang=python line start=29>
+
<sourcecode lang=python line start=44>
def render(self, screen, pos):
+
# Den aktuellen Frame an einer bestimmten Position rendern:
 +
    def render(self, screen, pos):
 +
        # Welchen Bereich aus der Grafik müssen wir anzeigen?
 +
        # Die x-Position können wir aus der Breite und der Start-Position berechnen,
 +
        # die restlichen Werte kennen wir bereits.
 
         screen.blit(self.__image, pos, pygame.Rect(self.__startX + (self.__width * self.__current), self.__startY, self.__width, self.__height))
 
         screen.blit(self.__image, pos, pygame.Rect(self.__startX + (self.__width * self.__current), self.__startY, self.__width, self.__height))
 
</sourcecode>
 
</sourcecode>
Zeile 799: Zeile 813:
 
Jetzt müssen wir die Animation nur noch aktualisieren, denn momentan würde immer nur das gleiche Bild (das erste) angezeigt.
 
Jetzt müssen wir die Animation nur noch aktualisieren, denn momentan würde immer nur das gleiche Bild (das erste) angezeigt.
  
<sourcecode lang=python line start=19>
+
<sourcecode lang=python line start=29>
def update(self, time = 1):
+
# Die update-Methode rufen wir einmal pro Frame auf:
 +
    def update(self, time = 1):
 +
        # Die vergangene Zeit addieren.
 
         self.__time += time
 
         self.__time += time
 
          
 
          
 +
        # Falls wir den Anzeige-Zeitraum überschreiten...
 
         if self.__time > self.__duration:
 
         if self.__time > self.__duration:
 +
            # ... setzten wir die Zeit zurück und gehen zum nächsten Frame.
 
             self.__time = 0
 
             self.__time = 0
 
             self.__current += 1
 
             self.__current += 1
 +
            # Sicherstellen, dass der aktuelle Frame auch verfügbar ist.
 
             if self.__current >= self.__num:
 
             if self.__current >= self.__num:
 
                 self.__current = 0
 
                 self.__current = 0

Version vom 29. Oktober 2011, 12:06 Uhr

Klicke hier, um diese Version anzusehen.

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge