Variabler roomspeed - gleiche geschwindigkeit

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

  • Variabler roomspeed - gleiche geschwindigkeit

    Hi,
    und noch eine frage:
    wie kriege ich es hin das sich mein player immer gleichschnell über den bildschirm bewegt, wen sich der roomspeed ändern kan?. ich habe schonmal sowas ausprobiert:

    GML-Quellcode

    1. x += 5*30/room_speed
    2. //bzw
    3. x += 5*room_speed/30
    aber beides weißt ab einer gewissen geschwindigkeit erhebliche unterschiede auf.
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • die erste der beiden Möglichkeiten ist die richtige, weil mit zunehmendem room-speed die geschwindigkeit des objektes geringer werden muss.
    Der Fehler könnte daher kommen, dass room_speed nur die angestrebten steps gespeichert hat, aber nicht die eigentlichen. Deshalb würde ich stattdessen die Variable fps nehmen. Probier mal.
  • Ich glaub du meinst sowas:

    GML-Quellcode

    1. x += 5*fps/room_speed


    (hab jetzt in der reihenfolge geschrieben, da room_speed sehr sehr sehr unwahrscheinlich den wert 0 haben wird und es daher kein Division error gibt) (bei fps weiß ich nicht ob 0 vorkommt, deshalb vorsichtshalber umgetauscht)
  • @FOODy
    Angenommen die Rechenleistung reicht aus, dann ist fps so groß wie room_speed. D.h. beide würden sich wegkürzen und die Geschwindigkeit wäre immer noch von den steps abhängig.
    Ich glaube aber Nobody meinte das so, dass die Geschwindigkeit in Echtzeit gleich bleiben soll, oder?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bl@ckSp@rk ()

  • ja, genaus so meine ich das.
    ich habe jetzt auch alles ausprobiert, aber nix geht vernünftig. rein theoretisch müsste es so sein:

    GML-Quellcode

    1. x+=spd*30*fps/globl.roomSpd
    leider wird das spiel dan seeehr langsam, und zweitens hängt sich mein spieler ohne vorwahnung einfach mal an kanten dran, was er bei festgelegtem roomspeed nicht macht.

    fazit:
    ich werde wohl doch keinen im optionsmenue einstellbaren room_speed einstellen, sondern einen festlegen.
    ich markiere einfach mal als gelöst, wen doch noch jamendem etwas einfällt, bitte posten.
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Bei mir ist das so, dass gleich nach dem Start des Spiels die fps für eine Sekunde lang 0 ist. Das liegt daran, dass diese Variable nur einmal pro Sekunde aktualisiert wird und das Programm wärend dieser Sekunde die Frames zählt um dann nach der Sekunde die wirklichen fps zu erhalten.
    Also einfach ne Abfrage machen.
  • also:
    der room speed ist eigendlich nicht gleich den fps zu sehen. der room speed ist sozusagen nur die maximale grenze für das spiel. diese kann natürlich "on the flow" (wärend das spiel läuft) verändert werden, aber stellt imme rnur das maximum an fps die das spiel erreichen kann. fps gibt hingegen die aktuelle geschwindigkeit des spiels aus. wenn man nun einen neuen raum "betritt" ist fps im ersten moment natürlich 0, weil noch gar nichts läuft. es müssen erst (wie der name fps sagt) erst einige frames per second ablaufen, bevor die die variable einen verlässlichen wert liefert.
    um nun eine gleichbelibende geschwindigkeit der objecte, auch bei unterschiedlichem room_speed, zu erlangen, muss man sich einer kleinen formel bedienen. die von Mr.FOODS scheint mir mit einer kleinen änderung am besten geeignet, da sie auch im create event des rooms (zur erinnerung: fps=0) funktionieren sollte.

    GML-Quellcode

    1. x += 5*(fps/room_speed)

    die klammern sind wegen dem rundungsfehler im game maker. so müsste das eigendlich funktionieren.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Ich bin trotzdem noch der Meinung, dass es keinen Sinn macht sowohl fps als auch room_speed mit einzubeziehen.
    Außerdem: wenn fps im Zähler steht, bedeutet das, dass je höher fps ist umso höher ist auch der speed. Das objekt soll sich aber gleich schnell bewegen, also muss fps im Nenner stehen. Nur weil fps auch Null sein kann, heißt das ja nicht, dass man das in den Zähler schreiben muss.
    Oder hat jemand noch ne andere Erklärung?
  • Gehen müsste es auch, wenn du eine Referenzzahl nimmst:

    GML-Quellcode

    1. fps_0=30; //Referenzwert
    2. speed_0=10; //speed bei fps_0
    3. speed = (speed_0*fps_0)/fps;


    mathematische Überlegung:
    (1) speed = Pixel pro frame
    (2) fps = frame pro sekunde -> (3) frame = fps * 1s
    (2) in (1) -> (4) speed = Pixel pro Sekunde / fps
    und die Pixel pro Sekunde bekomm ich wenn ich meinen Standardspeedwert mit meinem Standardfpswert multiplizier.

    Du kannst aber natürlich gleich alle speed Werte in Pixel pro Sekunde angeben und sparst die Multiplikation jedesmal:

    GML-Quellcode

    1. speed_s=300; // Pixel pro Sekunde
    2. speed = speed_s/fps;
    Dateien
    • fps_test.zip

      (2,03 kB, 98 mal heruntergeladen, zuletzt: )
    Einige meiner Spiele: