Bildwechsel des Monitors abfragen

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

  • Bildwechsel des Monitors abfragen

    Hallo,
    Ich arbeite gerade an einem Programm, dass Reaktionszeiten messen kann. Nach einer zufälligen Zeit wechselt der Hintergrund seine Farbe. Ab diesem Zeitpunkt wird gemessen wie lange man braucht, um zu klicken. Es läuft mit einem Roomspeed von 1000 steps/s, sodass es auf 1ms genau messen kann. Das Programm hat auch fast immer mit 1000fps (mit vereinzelnten Framedrops auf 999 oder 998fps). Bei einem Monitor mit 60hz hat man allerdings wegen der geringeren Bildwiederholungsrate eine Abweichung von bis zu +16,67ms. Um dies zu beheben ist meine Frage:

    Gibt es eine Möglichkeit den Farbwechsel so stattfinden zu lassen, dass er direkt vor dem Bildwechsel des Monitors stattfindet? bzw gibt es eine Möglichkeit die Zeit ab dem Anzeigezeitpunkt eines frames zu messen?
  • Rhazul schrieb:

    ich würde mit current_time arbeiten

    Ja, das ist eine gute Idee. Bei meinem Problem weiterhelfen tuts aber denke ich nicht, da der Frame ja, wenn ich 1000 ticks/sek habe trotzdem bis 16ms (1000ticks/s/60hz) bevor er angezeigt wird generiert werden kann.
    Und wenn ich den roomspeed auf 60ticks/sec setzte, wird der Mausklick denke ich erst im nächsten tick, also auch bis 16ms später, registriert.. das wäre also nur eine Verschiebung des Problems

    Edit: Habs eben nochmal mit roomspeed 1tick/s getestet und meine Vermutung, dass der klick erst im nächsten step ankommt, war richtig. Auch wenn man current_time benutzt. Also brauche ich 1000ticks/s, um keine Verzögerung beim Messen des klicks zu haben.
    :action_drawsprite: :event_collision: :action_killposition: = :action_health:

    :action_drawsprite: + :action_drawsprite: + :action_drawlivesimage: = :action_drawsprite: :action_drawsprite: :action_drawsprite:

    :action_drawsprite: + :action_color: = :action_spritecolor:

    :action_drawsprite: + :action_wrap: = :action_exit:

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

  • Also mit dem GM kann man sicher auch Anwendungen erstellen, Schwerpunktmäßig ist er allerdings nicht für sowas ausgelegt, du bräuchtest denke ich zumindest eine dll, am besten wäre aber das ganze direkt in C++ zu schreiben
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Rotfuchs7 schrieb:

    Dann rechne doch die 16,67 ms immer zurück. :D
    So das wenn der Farbwechsel kommt der timer um 16,67 ms zurückgesetzt wird. ^^

    16,67ms ist die maximale Zeit, die der zufällig generierte Farbwechsel vor dem Bildwechsel des Bildschirms ausgelößt wird. Die minimale Zeit liegt nahe 0ms. Ich könnte zwar eine Durchschnittliche Verzögerung von zufällig generiertem Frabwechsel zu angezeigtem Bild von 8,33ms abziehen. Dann wären die Ergebnisse aber auch nur auf +-8,33ms genau. Genau das würde ich gerne verhindern, da es bei einer schnellen Reaktion fast +-5% ausmacht. Außerdem habe ich dann einige Messungen, die schneller sind als die tatsächliche Reaktionszeit und mein Ziel ist es gerade die schnellste Reaktionszeit unter verschiedenen Bedingungen herauszufinden.

    Rhazul schrieb:

    Also mit dem GM kann man sicher auch Anwendungen erstellen, Schwerpunktmäßig ist er allerdings nicht für sowas ausgelegt, du bräuchtest denke ich zumindest eine dll, am besten wäre aber das ganze direkt in C++ zu schreiben

    ah ok danke für die Info :)

    Ich habe jetzt den roomspeed vor dem Farbwechsel auf 60 ticks/s gesetzt und nach dem Farbwechsel auf 1000 ticks/s. Ob das wirklich genauere Ergebnisse liefert, weiß ich nicht. Aber dann werde ich es einfach so lassen und die Ungenauigkeit bei den Ergebnissen berücksichtigen.
    :action_drawsprite: :event_collision: :action_killposition: = :action_health:

    :action_drawsprite: + :action_drawsprite: + :action_drawlivesimage: = :action_drawsprite: :action_drawsprite: :action_drawsprite:

    :action_drawsprite: + :action_color: = :action_spritecolor:

    :action_drawsprite: + :action_wrap: = :action_exit:
  • Eine DLL ist viel schneller, dann kannst du das ganze bei 60ticks laufen lassen,denn wenn ich nicht ganz falsch liege kommen die informationen dann eh asynchron rein. Du bräuchtest halt nur eine DLL welche beim Farbwechsel angesprochen wird, dann die Zeit misst bis ein mausclick reinkommt. Das dürfte nicht allzu umfangreich sein.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Denke ich auch mal, dass eine DLL da sehr hilfreich wäre. Ich könnte sowas mit C++ machen, habs aber noch nicht geschafft, eine DLL für GM zu machen.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Wenn du einen Raum mit 1000 fps hast, dann interessiert doch die Monitorgeschwindigkeit gar nicht. Du kannst ja trotzdem jeden Frame einmal klicken und es wird vom Computer erkannt, der Monitor hängt ja nur mit dem Anzeigen hinterher.
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.