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 :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))
           

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:

Code: Alles auswählen

for i in xrange(5):
     MarioX+= 5
     time.sleep(0.2)

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 :wink:

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

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
http://www.pygame.org/docs/ref/time.htm ... .time.wait

Ist das nun soo schwer zu finden?

Gruß

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?