Seite 1 von 1

Pygame Animationsphasen

Verfasst: Freitag 22. Juni 2012, 14:19
von Foxi300
Hallo Leute,

ich mache derzeit ein Spiel in pygame und als Anfänger hätt ich da mal eine Frage. In dem Spiel, kann man einen Menschen steuern (links, rechts). Nun möchte ich, dass wenn man z.B. nach links geht, auch eine entsprechende Animation kommt (Die Person soll eine Laufanimation haben). Die verschiedenen Bilder habe ich schon erstellt (Linker Schritt, rechter Schritt,...). Nun hätte ich es gerne so, dass diese auch entsprechend angezeigt werden.

Wie?

Danke schonmal

Foxi300

Re: Pygame Animationsphasen

Verfasst: Freitag 22. Juni 2012, 14:37
von webspider
Zum Thema 2D-Animation wäre das passende Stichwort "Spritesheet".

Re: Pygame Animationsphasen

Verfasst: Freitag 22. Juni 2012, 14:42
von Hyperion
Foxi300 hat geschrieben: Wie?
Naja, Du musst halt intern Deinem Sprite-Objekt das jeweils nächste, passende Bild an `sprite.image` binden. Du könntest das mit einer Kombi aus einem Dictionary und `itertools.cycle` regeln:

Code: Alles auswählen

from itertools import cycle

class MySprite(pygame.sprite.Sprite):

    def __init__(self, ...):
        # sollte man natürlich übergeben!
        animations = {
            "right": (image1, image2, ...),
            "left": (image1, image2, ...)
        }
        # wir merken uns die aktuelle Richtung
        self.direction = "right"
        self.animation = init_animation_sequence(self.direction)

    def update(self):
        # hier passiert die "Magie". Dank `itertools.cycle` wird die aktuelle
        # Sequenz wiederholt durchlaufen -> "A B C A B C A ..."
        # ändert sich die Richtung, muss man `self.animation` zunächst
        # ändern, was in `change_direction` passiert.
        self.image = self.animation.next()

    def init_animation_sequence(self):
         return cycle(self.animations[self.directions])

    def change_direction(self, ...):
        # irgend welche Logik, die die Richtung umändert
        self.animation = init_animation_sequence(self.direction)
Der Code ist für Python2.x geschrieben; bei Python3 müsste es `self.animation.__next__()` lauten.

Re: Pygame Animationsphasen

Verfasst: Freitag 22. Juni 2012, 14:46
von Dav1d
@Hyperion, wieso nicht:

Code: Alles auswählen

self.image = next(self.animation)

Re: Pygame Animationsphasen

Verfasst: Freitag 22. Juni 2012, 14:50
von Hyperion
@Dav1d: Kann ich nicht begründen, da `next()` in der Tat die bessere Lösung ist :-P

Re: Pygame Animationsphasen

Verfasst: Sonntag 24. Juni 2012, 08:24
von Foxi300
Also danke, Hyperion, aber ich verstehe diesen Text nicht wirklich, ich bin ein erbärmlicher Anfänger in Pygame ;)
Ich denke, ich bräuchte mal ein gutes (wenn möglich deutsches) Tutorial. Kennt jemand eins?

Re: Pygame Animationsphasen

Verfasst: Sonntag 24. Juni 2012, 08:41
von Hyperion
Eigentlich hat mein Beispiel nur marginal etwas mit `pygame` zu tun! Also fehlen Dir eher Grundlagen von Python ;-)

Was genau ist Dir denn daran unklar? Eigentlich steht da ja nicht viel... also: woran liegt 's?

Du hast oben ja geschrieben, dass Du schon ein Spiel hast - und Dir die Animationen fehlen. Insofern solltest Du ja auch schon eine Klasse haben, die von `pygame.sprite.Sprite` erbt; daran kann es folglich nicht liegen. Die `update`-Methode von `Sprite` wird in der Doku beschrieben und ist imho per se erst einmal trivial. Da Bleiben dann eigentlich nur noch `itertools.cycle` und mein Dictionary... beides ist imho ja nun auch nicht schwer zu kapieren.

Ich bin im Moment wirklich ratlos, wound wieso Du meine Code-Skizze nicht verstehst!