Event Steuerung in Python: Steps pro Sekunde begrenzen

  • Python

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Event Steuerung in Python: Steps pro Sekunde begrenzen

    Heyho,

    Ich hab' mich neben GML auch schon ein bisschen mit Python beschäftigt. Nun habe ich ein Eventsystem eingefügt , um alles etwas leichter zu machen:
    Step
    Begin Step
    End Step
    Create
    Collision
    Room Start
    Room End

    Wie sieht nun der Code aus, der room_speed mal die Funktion PE_Events
    pro Sekunde ausführt? Also er soll sie maximal so oft ausführen und das
    genau im Abstand 1 Sekunde /room_speed. (Nur so nebei: Python 2.5x)

    Mfg
    Diesel
  • Ich kenn mich zwar in Python nicht aus, aber vom Prinzip so:

    Wenn du 60 Steps pro Sekunde hast, dauert jeder Step 1000/60 = 16,7 ms
    Dann setzt du ne Variable beim Beginn jedes Steps zur aktuellen Systemzeit (Da müsste es doch eine Funktion geben, die die Zeit in Millisekunden seit Programm/Computerstart angibt)
    und vergleichst sie am Ende des Steps mit der aktuellen Zeit (z.B. Anfang 9876 ms, dann 9880 ms => 4 ms)
    und wartest dann 16,7 - verbrauchte Zeit an Millisekunden (Im Beispiel 12,7 ms)

    Hoffe es ist realisierbar.
    Was auch geht, ist alle Bewegungen von der verbrauchten Zeit abhängig zu machen, dann kann man das Programm / Spiel so schnell laufen lassen wie möglich. Das lastet dann dafür den Computer sehr aus.
  • Die meisten Spiele beschränken sich nicht auf FPS oder sagen wir mal so nicht auf so eine niedrige wie die vom GM standardmäßig verwendete, sondern gehen so hoch rauf wie sichs nun mal ausgeht. Was Chaos Creator wahrscheinlich gemeint hat, ist ein System einzuführen, sodass zb Speed nicht auf Px/Step beruht sondern auf Px/ms oder s. Also dass Bewegungen nicht mehr Stepabhängig sind, sondern zeitbasierend.

    © 2008 by Teamgrill Productions
  • Zeit basierend geht nicht...
    Wäre schlecht und ist 100%ig falsch.
    Wie willst du z.B. 60 Bilder pro sekunde haben, wenn du nicht weißt, wie lange eine Sekunde dauert?

    Also vom Prinzip her macht es der Gamemaker auch so:
    Wenn du einen room_speed von 60 hast, dann dauert ein Step eine sechzigstel Sekunde.
    Also wird gemessen, wie lange ein Step braucht, zum Beispiel eine hundertachzigstel Sekunde.
    Dann wird der Rest der sechzigstel Sekunde abgewartet, das wären zwei hundertachzigstel Sekunden.
    Macht dann insgesamt drei hundertachzigstel = eine sechzigstel Sekunde. Und dann wird der nächste Schritt ausgeführt.


    PS: Es MUSS eine möglichkeit zur Zeitmessung geben. Wie wärs mit Google?
  • Natürlich geht das. Schon mal im GM ein fps-unabhängiges Spiel gemacht? Du errechnest dir einfach in jedem Codeaufruf die Zeit, die seit dem letzten Aufruf vergangen ist in zb Millisekunden, dividierst den Wert durch die gewählte Einheit (in diesem Fall durch 1000) und kannst dann alle Bewegungen und Geschwindigkeiten anhand dieses Zeitfaktors abgleichen. Wenn du den Zeitfaktor zb noch mit 30 multiplizierst hast du eine Relation der verwendeten Geschwindigkeiten. In diesem Fall gehen alle Geschwindigkeiten von 30 fps aus, sodass der Faktor bei 30 fps 1 ist, bei 60fps 0.5 usw.

    © 2008 by Teamgrill Productions
  • @Chaos Creator: Könnte man machen, braucht aber wieder Zeit, um aus zu rechnen wie viel Zeit es
    nach dem Abzeihen der verbrauchten Zeit ist, ergo ---> Spiel läuft nach einigen Minuten nicht mehr korrekt.

    P.S.:ja, also... das es eine Zeitsteuerung gibt war mir klar. :|

    @MasterXY: Jo, so werd ich's machen. Danke.

    Mfg
    Diesel