Pygame-Tutorial
Aus Spieleprogrammierer-Wiki
(Unterschied zwischen Versionen)
[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= | + | <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= | + | <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.