Eingabe Verwalten



  • Sers,
    ich mal wieder...
    Also, in meinem Programm will ich nur 25 FPS rendern, deshalb hab ich folgendes in die MainLoop eingebaut:

    //wir sind in der ML
    time1 = GetTickCount();
    
    ...
    GetInput();
    Render();
    ...
    
    do          
    {              
    time2=GetTickCount(); 
    Sleep(3);
    } 
    while(time2-time1 < 1000/25);
    

    So, wenn ich aber jetzt Tastaturabfrage usw. in meine ML packe, ruckelt es immer,weil ja nur 25 mal abgefragt wird.

    Habt ihr ne Ahnung wie ich das ändern kann?



  • Du baust nen Counter ein der nur alle x-Zeiten (also 25 mal inder Sekunde), seine Grenze erreicht und dann renderst du alles und setzt ihn auf 0;
    Es ruckelt nur weil zwischen den Darstellungen dein Sleep() Aufruf alles verlangsamt und somit reagiert das Programm erst später auf deine Eingaben.



  • Kuldren schrieb:

    Du baust nen Counter ein der nur alle x-Zeiten (also 25 mal inder Sekunde), seine Grenze erreicht und dann renderst du alles und setzt ihn auf 0;

    Das musst ich mir auch erst zwei Mal durchlesen ums zu verstehen was du meinst 😛

    Kurze Erläuterung für den Threadersteller:

    while (true) {  // Mainloop
    
    checkInput();
    
    if (esIstWiederZeitZuRendern)
        render();
    
    update()
    }
    

    In update() setzt du dann je nach Zeit das Flag esIstWiederZeitZuRendern auf true oder false.

    ::edit::
    Btw, denk dran, dass der Windows Timer nicht genauer als 15ms ist. Für prezise Zeiten nimm den High Performance Counter.



  • Wie benutze ich den High-Performance-Timer?




Anmelden zum Antworten