Nach langem erfolglosen Versuchen wende ich mich mal hier an das Forum.
Ich möchte gerne zwischen 2 Befehlen einen gewissen Zeitabstand setzten genauer gesagt möchte ich eine Animation abspielen lassen und deswegen muss ich die zeit ziwchen den einzelnen Frames regulieren können. Kann mir jemand helfen?
Zeitabstände einbauen
Kann gut sein das es dieser Befehl ist, ich möchte halt zwischen 2 Frames einer Animtation eine kleine Pause machen, kannst du das time.sleep() ein wenig erläutern?
edit: Habs ausprobiert aber ist anscheinden nicht das wonach ich suche.
Ich möchte sozusagen eine animerte .gif datei in python schreiben
edit: Habs ausprobiert aber ist anscheinden nicht das wonach ich suche.
Ich möchte sozusagen eine animerte .gif datei in python schreiben
Die Zeitspanne zwischen zwei Motiven innerhalb eines animierten GIFs wird in der GIF-Datei angegeben. Da musst Du mal nach dem genauen GIF-Dateiformat googeln. Steht auch in der "Encyclopedia of Graphics File Formats" von Murray & van Ryper, vielleicht gibt es das inzwischen auch online.Basti91 hat geschrieben:edit: Habs ausprobiert aber ist anscheinden nicht das wonach ich suche.
Ich möchte sozusagen eine animerte .gif datei in python schreiben
Glaub du hast mich nicht richtig verstanden, ich möchte ein Spiel proggen mit hilfe von pygame. Das ganze soll ein Jump and Run sein. Da Python keine animierten .gifs anzeigen kann muss ich die Bewegungsabläufe nun irgendwie mit python moddelieren also viele Frames aneinanderhängen.
Nun hab ich aber das Problem, das mir immer nur der erste Frame der Bewegung angezeigt wird, desshalb habe ich die Vermutung, das die Frames zuschnell abgespielt werden und ich deswegen zwischen den Framewechseln pausen machen muss.
Nun hab ich aber das Problem, das mir immer nur der erste Frame der Bewegung angezeigt wird, desshalb habe ich die Vermutung, das die Frames zuschnell abgespielt werden und ich deswegen zwischen den Framewechseln pausen machen muss.
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Dann pausiere halt mit time.sleep() oder wechsle nur jeden Nten Frame dein Bildchen.
Habs jetzt wieder mit time.sleep() probiert, die abstände funktionieren auch wunderbar, aber ich bekomme immer nur den letzten Frame angezeigt Weiss jemand woran das liegt?
Hier ein ausschnitt des Programms an der besagten Stelle:
Hier ein ausschnitt des Programms an der besagten Stelle:
Code: Alles auswählen
if Bewegung:
if rechts:
Mario=Mariorechts2
MarioX+= 5
time.sleep(float(0.2))
Mario=Mariorechts3
MarioX+=5
time.sleep(float(0.2))
Mario=Mariorechts4
MarioX+=5
time.sleep(float(0.2))
Mario=Mariorechts5
MarioX+=5
time.sleep(float(0.2))
Mario=Mariorechts6
MarioX+=5
time.sleep(float(0.2))
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Mit so wenig Code kann man das nicht erkennen, allerdings kann ich zwei Dinge sehen:
1. 0.2 ist ein float, du musst das nicht noch in nen float umrechen
2. Nutze eine Schleife:
1. 0.2 ist ein float, du musst das nicht noch in nen float umrechen
2. Nutze eine Schleife:
Code: Alles auswählen
for i in xrange(5):
MarioX+= 5
time.sleep(0.2)
Zuletzt geändert von Basti91 am Sonntag 3. Mai 2009, 21:41, insgesamt 1-mal geändert.
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Du zeichnest deine Figur ja nur am Anfang des Mainloops neu, kein Wunder, dass es nicht kümmert, wie lange du zwischendrin wartest ;-)
Das mit den Bildern (Mariorechts1,...) würde ich als Iterator machen, zum Beispiel als Liste.
Schreibe Variablen klein und mixe vor allem keine englischen und deutschen Begriffe. Außerdem solltest du keinen Code auf Modulebene bauen, schreib das alles schön in Funktionen und Klassen und so weiter...
Das mit den Bildern (Mariorechts1,...) würde ich als Iterator machen, zum Beispiel als Liste.
Schreibe Variablen klein und mixe vor allem keine englischen und deutschen Begriffe. Außerdem solltest du keinen Code auf Modulebene bauen, schreib das alles schön in Funktionen und Klassen und so weiter...
Code: Alles auswählen
if Bewegung:
if rechts:
Mario=Mariorechts2
screen.blit(Mario,(MarioX,MarioY))
MarioX+= 5
time.sleep(0.2)
Mario=Mariorechts3
screen.blit(Mario,(MarioX,MarioY))
MarioX+=5
time.sleep(0.2)
Mario=Mariorechts4
screen.blit(Mario,(MarioX,MarioY))
MarioX+=5
time.sleep(0.2)
Mario=Mariorechts5
screen.blit(Mario,(MarioX,MarioY))
MarioX+=5
time.sleep(0.2)
Mario=Mariorechts6
screen.blit(Mario,(MarioX,MarioY))
MarioX+=5
time.sleep(0.2)
-
- User
- Beiträge: 120
- Registriert: Montag 4. Juni 2007, 19:19
Mit time.sleep() wird deine GUI zwischendurch nicht upgedated, also nur das letze Bild angezeigt. Ich hatte kürzlich das selbe Problem mit einer PyQt4-GUI. Dort war die Lösung, einen QTimer zu verwenden, der in festen Abständen eine Funktion auslöst, die jedesmal ein anderes Bild anzeigt.
Keine Ahnung ob PyGame was ähnliches hat, bzw auf welchem Toolkit das aufbaut.
Keine Ahnung ob PyGame was ähnliches hat, bzw auf welchem Toolkit das aufbaut.