rechnung, um bei weniger fps sich gleich schnell zu bewegen

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

  • rechnung, um bei weniger fps sich gleich schnell zu bewegen

    Hi, hab im spiel hohe FPS verluste, wenn ich bots hinzufüge, und daher bewegt sich alles sehr langsamm.
    Daher wollte ich mit einer speed-rechnung das wieder ausgleichen, also das egal wie nidrig der fps wert ist sich immer gleich "schnell" bewegt, also wenn mal die FPS 60 soll sich das objekt speed = 2 bewegen, fällt mal der wert auf 40 runter soll der wert erhöht werden, speed = 4 oder so, natürlich kann ich das immer mit einer if frage machen

    GML-Quellcode

    1. if fps >50 then {speed = 3}
    2. if fps <= 50 then { speed = 3.5}
    3. if fps <= 40 then { speed = 4}
    4. .
    5. .
    6. .


    aber das wer nicht so gut, und es würde dann etwas eigenartig ausehen wenn sich die figur auf einmal schneller bewegt (von fps = 51 auf 50 etc).

    Also im klartext, eine rechnung die das objekt immer gleichschnell bewegen lässt.
    *gähn*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von The_Shadow3 ()

  • ahh ja danke, ich werd es mal zuhause probieren, obs gut klappt.
    Aber gibts auch eine rechnung, wenn man nicht genau weis wie der speed beim objekt ist wenn 60fps ist? z.b. wenn sich der speed des objekts im laufe des programms erhöht


    Edit: ahh ich glaub ich hab die lösung, falls die wirklich funktioniert

    GML-Quellcode

    1. speed = speed*60/fps //Das erste speed nach "=" ist das unbehandelte speed
    *gähn*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von The_Shadow3 ()

  • ähm das ist so einfach ich frag mich ob du das nicht verstanden hast -.-

    GML-Quellcode

    1. speed=room_speed/20+room_speed/ges
    2. //wobei ges die erhöhung ist, je kleiner ges ist desto höher ist der speed
    3. //du könntest auch direkt ne variable benutzen anstatt /20 die den speed bestimmt

    also das hätteste auch alleine rausfinden können -.-

    EDIT: script Fehler beseitigt
    EDIT2: verständlicher geschrieben

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Genesis ()

  • Und du glaubst jetzt wirklich diese unnötig höhere anzahl von Rechnungen macht dein Spiel auch nur irgendwo ansatzweise schneller? Machs so wie jedes "normale" Spiel, das die FPS dropt, wenn der Rechner zu langsam ist. Stell das Screenupdate auf manuel, rechne aus wie lange das Zeichnen des letzten Screens gedauert hat und zeichne, wenn das Game zu langsam wird nur mehr jedes 2te oder 3te Bild.
    ...
  • @Shoba: jetzt scheint es doch irgendwie mit den screen_redraw zu funktionieren (also keine fehler mehr), blos ich hab davon wenig arnung und weis auch nicht wie man das berechnen kann mit dem "Zeichnen des letzten Screens", kannst du mir da vielleicht dann helfen oO?

    Momentan sieht es so ungefähr aus :

    im Create_event:

    GML-Quellcode

    1. screen_automatig_redraw(false) //oder so ähnlich war der befehl^^"
    2. screen_redraw()
    3. alarm[0] = 1.35 //keine arnung wie man auf diese Zahl gekommen ist oO


    Im Alarm[0]:

    GML-Quellcode

    1. screen_redraw()
    2. alarm[0] = 1.35



    Jetzt muss ich ja irgendwie herausfinden, wie lange der letzte Draw erfolgte, aber wie macht man das?



    P.s. sorry für doppel_post -.-"
    *gähn*
  • Hmm... ich hätte probiert ein Example zusammenzustellen, aber irgendwie hat der Gamemaker keine funktion, in der ich die Zeit zwischen zwei Steps in Millisekunden berechnen kann. Das beste währe ohnehin, das der Gamemaker diese funktionalität selbst zur verfügung stellt. Korrigiert mich, falls es doch irgendwo eine Funktion gibt, die solche zeitangaben zurückgibt, aber ansonsten glaube ich das man das nur mit einer DLL lösen könnte.
    ...
  • @interceptor mhh.. also das funktioniert nicht wirklich :-/ Kann auch sein das ich was falsch gemacht habe.
    Also ich hab jetzt dein Code in dem step event gepackt, danach hab ich statt "alarm[0] = 1.35 " in "alarm[0] = step_time" umgeändert und im spiel zuckelte es wie sau bis es schließlich total aufhing^^
    Im debug konnte ich sehen das step_time =16 ungefähr ist und das ist ja ziemlich hoch oO! Muss ich da noch eine rechnung machen?



    P.s. hab wieder internet^^´= hab GM vor mir
    *gähn*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von The_Shadow3 ()

  • step_time sagt, wieviele Millisekunden zwei Steps auseinander liegen. Wenn du
    1000 Millisekunden durch steptime teilst, erhältst du die fps... 1000/16=62,5
    Was du da mit dem alarm machen willst versteh ich sowieso nicht...
    Einige meiner Spiele:
  • Benutzer online 1

    1 Besucher