Zeitabstände einbauen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

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?
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

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.
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

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
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

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.
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

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.
Dauerbaustelle
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.
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

Habs jetzt wieder mit time.sleep() probiert, die abstände funktionieren auch wunderbar, aber ich bekomme immer nur den letzten Frame angezeigt :shock: 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))
           
Dauerbaustelle
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:

Code: Alles auswählen

for i in xrange(5):
     MarioX+= 5
     time.sleep(0.2)
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

Naja dann hier mal der ganze Code:

http://paste.pocoo.org/show/115582/
Zuletzt geändert von Basti91 am Sonntag 3. Mai 2009, 21:41, insgesamt 1-mal geändert.
Dauerbaustelle
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...
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

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 :(
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

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
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

wenn du mir sagst wie ich das mache bzw was ne pastebin is mach ich das gerne :wink:
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Das kann Google dir sagen. Aber weil ich ja so nett bin: paste.pocoo.org :wink:
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

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 :(
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

ok is erledigt, aber jetzt mal wieder back to topic: wie kann ich die Figur nach jedem Schritt neu zeichnen?
ichbinsisyphos
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.
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

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
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

warum benutzt du nicht pygame-sprites?
http://www.kinderpornos.info
Antworten