Seite 1 von 2
Zeitabstände einbauen
Verfasst: Sonntag 3. Mai 2009, 18:42
von Basti91
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?
Re: Zeitabstände einbauen
Verfasst: Sonntag 3. Mai 2009, 18:52
von kbr
Basti91 hat geschrieben:Ich möchte gerne zwischen 2 Befehlen einen gewissen Zeitabstand setzten
Suchst Du vielleicht time.sleep()?
Ansonsten müsste ich raten, was Du genau meinst.
Verfasst: Sonntag 3. Mai 2009, 19:04
von Basti91
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
Verfasst: Sonntag 3. Mai 2009, 19:18
von kbr
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
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.
Verfasst: Sonntag 3. Mai 2009, 19:25
von Basti91
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.
Verfasst: Sonntag 3. Mai 2009, 19:48
von Dauerbaustelle
Dann pausiere halt mit time.sleep() oder wechsle nur jeden Nten Frame dein Bildchen.
Verfasst: Sonntag 3. Mai 2009, 20:16
von Basti91
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:
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))
Verfasst: Sonntag 3. Mai 2009, 20:40
von Dauerbaustelle
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:
Verfasst: Sonntag 3. Mai 2009, 20:52
von Basti91
Naja dann hier mal der ganze Code:
http://paste.pocoo.org/show/115582/
Verfasst: Sonntag 3. Mai 2009, 21:05
von Dauerbaustelle
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...
Verfasst: Sonntag 3. Mai 2009, 21:22
von Basti91
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)
hab jetzt das hier probiert aber das funzt auch nicht

Verfasst: Sonntag 3. Mai 2009, 21:30
von gkuhl
Pack bitte deinen langen Code in einen Pastebin, ansonsten kann es zu Probleme mit dem Forum kommen und einige Leute können dir nicht mehr antworten.
Danke
Verfasst: Sonntag 3. Mai 2009, 21:32
von Basti91
wenn du mir sagst wie ich das mache bzw was ne pastebin is mach ich das gerne

Verfasst: Sonntag 3. Mai 2009, 21:34
von derdon
Das kann Google dir sagen. Aber weil ich ja so nett bin: paste.pocoo.org

Verfasst: Sonntag 3. Mai 2009, 21:36
von gkuhl
Kopiere deinen Code
hier rein und tausche dann den Code in deinem langen Beitrag gegen den Link, den du bekommst aus.
Edit: derdon war schneller

Verfasst: Sonntag 3. Mai 2009, 21:42
von Basti91
ok is erledigt, aber jetzt mal wieder back to topic: wie kann ich die Figur nach jedem Schritt neu zeichnen?
Verfasst: Sonntag 3. Mai 2009, 21:47
von ichbinsisyphos
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.
Verfasst: Montag 4. Mai 2009, 00:53
von problembär
Verfasst: Montag 4. Mai 2009, 12:20
von Basti91
Das pygame.time.wait ist schon ganz gut, löst aber noch nicht mein problem, dass ich nicht nach jedem Frame die Figur neu zeichnen kann
Verfasst: Montag 4. Mai 2009, 12:31
von Dill
warum benutzt du nicht pygame-sprites?