Frames per second auf iDevices anzeigen lassen

  • iOS

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

  • Frames per second auf iDevices anzeigen lassen

    Hallo Leute,

    ich würde gerne in meinem Spiel die Frames per second auf iPhone/iPad/iPod anzeigen.

    Habe es folgendermaßen probiert, steht im Draw Event:

    GML-Quellcode

    1. draw_text(view_xview+1400,view_yview+20,fps)



    Wenn ich es teste zeigt er mir aber die ganze Zeit "0" an, obwohl das Spiel recht flüssig läuft.

    Kann mir jemand helfen? Was mach ich falsch? ?(


    Vielen Dank im Voraus!

    Gruß,
    Pascal
  • DragonGamer schrieb:


    Sorry, nimm 1/(delta_time/1000000)
    Das sollte dann funktionieren
    Wenn ich das Spiel jetzt auf einem iPod 2. Generation teste schwankt es zwischen 25 und 30

    Auf einem iPhone 4 und iPad 3 bekomm ich ca. 29/30

    Sind das jetzt die Frames per second?

    Sind das gute Werte? Spiel läuft eigentlich auf allen Geräten recht flüssig...
  • Wenn du einen Roomspeed von 30 hast, wird versucht zwischen jedem Frame 1000/room_speed Millisekunden Platz zu lassen (einen unendlich großen Room Speed führt dazu das die CPU voll belastet wird).
    1000/30 ~ 33ms.

    Wenn du nun eine FPS von 50 hast, so vergehen zwischen den Frames 20ms.

    1 000 000/fps = delta_time (1 000 000 weil 1 Sekunde = 1 000 000 Mikrosekunden sind)

    oder umgeformt:

    1 000 000/delta_time = fps

    Hoffe das ich richtig liege.

    Sind das gute Werte? Spiel läuft eigentlich auf allen Geräten recht flüssig...
    Man kann sagen über oder 30 flüssig. Auch wenn das menschliche Auge nur etwa 24 Bilder pro Sekunde wahrnehmen kann.


    #edit:
    Mikrosekunden nicht beachtet. Ausm Kopf gemacht.

    #edit2:
    1 500 Beiträge. :sauf: So viele Edits...

    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von henrik1235 ()

  • Vielen Dank schonmal für eure Antworten!

    Ich mache mir delta_time auch noch woanders zunutze:

    Im Begin step des Players erstelle ich folgende variable:

    GML-Quellcode

    1. global.delta=30/1000000*delta_time



    Wenn meine frames per second bei 30 liegt, dann liegt global.delta bei 1.0

    Verschlechtern sich die Frames per second dann erhöht sich global.delta proportional.

    Ich setze es überall dort ein wo Bewegungen stattfinden, also z.B. die des Players. Um ihn beispielsweise nach rechts laufen zu lassen mach ich folgendes:

    GML-Quellcode

    1. hspeed+=15*global.delta



    Wenn sich jetzt also die frames per second verschlechtern, läuft der Player etwas schneller womit die wahrgenommene Geschwindigkeit des Players immer gleich bleibt.


    Da mein Player schon vorher recht flüssig gelaufen ist kann ich jetzt nicht kontrollieren ob das ganze funktioniert.

    Aber in der Theorie macht es doch Sinn, oder?
  • Pascal2851981 schrieb:


    GML-Quellcode

    1. hspeed+=15*global.delta



    Wenn sich jetzt also die frames per second verschlechtern, läuft der Player etwas schneller womit die wahrgenommene Geschwindigkeit des Players immer gleich bleibt.


    Da mein Player schon vorher recht flüssig gelaufen ist kann ich jetzt nicht kontrollieren ob das ganze funktioniert.

    Aber in der Theorie macht es doch Sinn, oder?
    Rein theoretisch gesehen macht es Sinn, solange die FPS nicht komplett runterfallen (<10)
    Außerdem musst du noch andere Werte und Proportionen mit einbeziehen wie z.B. Sprünge, die aufgrund von erhöhter Bewegungsgeschwindigkeit dementsprechend auch länger/höher ausfallen.
  • Fin schrieb:

    Rein theoretisch gesehen macht es Sinn, solange die FPS nicht komplett runterfallen (<10)
    Was würde denn passieren wenn die Frames komplett runterfallen?


    Fin schrieb:

    Außerdem musst du noch andere Werte und Proportionen mit einbeziehen wie z.B. Sprünge, die aufgrund von erhöhter Bewegungsgeschwindigkeit dementsprechend auch länger/höher ausfallen.
    Stimmt, ist mir auch schon aufgefallen... Was kann ich denn da machen?
  • Wenn die FPS zu gering werden, werden zum Beispiel Kollissionen ungenau bzw übersprungen, stell dir mal vor global.delta nimmt einen besonders hohen Wert an, da die Framerate im Keller ist, dann könnte es passieren, das der Spieler in einem Step eine so große Positionsänderung durchgeht, dass er durch eine Wand gehen kann. Das kann man verhindern indem man ab einem bestimmten Zeitpunkt Geschwindigkeitseinbußen zulässt oder ein erweitertes Kollissionssystem verwendet, das auch zwischen Steps prüft (zum Beispiel collision_line mit xprevious yprevious x und y).
    Grundsätzlich ist das aber die Art, wie Spiele arbeiten, im Normalfall gibt es keine fixe Framerate und es läuft alles so schnell wies eben möglich ist.

    © 2008 by Teamgrill Productions
  • MasterXY schrieb:

    stell dir mal vor global.delta nimmt einen besonders hohen Wert an, da die Framerate im Keller ist, dann könnte es passieren, das der Spieler in einem Step eine so große Positionsänderung durchgeht, dass er durch eine Wand gehen kann.
    Ok, verstehe. Das kann ich ja dadurch verhindern indem ich "global.delta" bei 1.5 begrenze, also es soll nicht höher steigen als 1.5. Sobald die Framerate dann unter 20 sinkt bleibt global.delta bei 1.5 und somit sind keine zu großen Sprünge möglich.

    Begin Step:

    GML-Quellcode

    1. global.delta=min(30/1000000*delta_time,1.5)


    Nach rechts laufen (Beispiel für Bewegungsregulierung)

    GML-Quellcode

    1. hspeed+=15*global.delta



    hspeed-Erhöhung wird dadurch also nicht höher als 22.5 sein.