JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Frage zu QueryPerformanceCounter

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
MichaelB
Mini JLI'ler



Anmeldedatum: 09.07.2005
Beiträge: 27

Medaillen: Keine

BeitragVerfasst am: 30.07.2005, 11:19    Titel: Frage zu QueryPerformanceCounter Antworten mit Zitat

Hallo,

nachdem mein erstes Pong (http://de.geocities.com/mymibran/Pong.zip) jetzt läuft, ist mir etwas aufgefallen:

Ich hab's exakt wie im JLI Buch implementiert, allerdings ist mir aufgefallen, daß das Programm dann etwa jede Sekunde (wenn CurCont - LastCount > Frequency) bei dieser Abfrage eine minimale Denkpause einlegt, die sich wie folgt äußert:

Die Animation friert für einen winzigen Sekundenbruchteil ein, um dann danach das verlorene Stück Weg durch kurzfristige Beschleunigung wieder einzuholen. Kein großer Effekt, aber wenn man ganz genau hinschaut, sieht man's: Jede Sekunde geht ein kleiner Ruck durch den Spielball...

Gruß,
Michael


Zuletzt bearbeitet von MichaelB am 30.07.2005, 12:08, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 30.07.2005, 11:42    Titel: Antworten mit Zitat

Liegt mit ziemlich hoher Wahrscheinlichkeit nicht an dieser Funktion, zeig doch mal etwas Code.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
MichaelB
Mini JLI'ler



Anmeldedatum: 09.07.2005
Beiträge: 27

Medaillen: Keine

BeitragVerfasst am: 30.07.2005, 12:00    Titel: Antworten mit Zitat

Code:
   // Struktur, in der Informationen zur Nachricht gespeichert werden
    MSG msg = {0};

    // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
   while(msg.message != WM_QUIT)
   {
      if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
      {
         // Nachricht weiterleiten
         TranslateMessage(&msg);      // falls bestimmte Tastenmessage
         DispatchMessage(&msg);      
      else
      {
         // Hole Tickerstand
         QueryPerformanceCounter((LARGE_INTEGER*)&CurrentCount);

         if ((CurrentCount - LastCount) > Frequency)
         {
            LastCount = CurrentCount;
            Framerate = Frames;
            Frames = 0;
         }

         // Tasten abfragen und Sprite entsprechend bewegen
         if(GetAsyncKeyState(VK_UP) & 0x8000)
            LeftRacket.MoveUp(30);
         else if(GetAsyncKeyState(VK_DOWN) & 0x8000)
            LeftRacket.MoveDown(30);

         Frames++;

         OpponentKI();

         DrawScene();                  
      }
   }
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 30.07.2005, 12:13    Titel: Antworten mit Zitat

In dem oberen If-Block fehlt eine geschweifte Klammer.

Wie hoch ist im Moment deine Framerate? Bedenklich niedrig?
Kommentier doch mal systematisch alles aus, was nicht direkt mit der FPS-Berechnung zusammenhängt und schau, wo der Flaschenhals liegen könnte.

OpponentKI() und DrawScene() klingen verdächtig.
Inputhandling mittels GetAsyncKeyState() ist auch nicht wirklich effizient.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
MichaelB
Mini JLI'ler



Anmeldedatum: 09.07.2005
Beiträge: 27

Medaillen: Keine

BeitragVerfasst am: 30.07.2005, 14:55    Titel: Antworten mit Zitat

GreveN hat Folgendes geschrieben:
In dem oberen If-Block fehlt eine geschweifte Klammer.


Ups ja, hatte vor dem Reinkopieren noch einen (für den Thread unwichtigen) Programmteil unsauber entfernt.

Erstmal danke für die Antwort - verfolge derzeit ein paar weitere Beobachtungen. melde mich dann wieder; vielleicht sogar mit des Rätsels Lösung.

Gruß,
Michael
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MichaelB
Mini JLI'ler



Anmeldedatum: 09.07.2005
Beiträge: 27

Medaillen: Keine

BeitragVerfasst am: 04.08.2005, 12:07    Titel: Antworten mit Zitat

Ok, Ursache des Problems gefunden: Fenstermodus.

Wenn ich das FRAMETIMINGEX Beispiel aus dem Buch kompiliere (allerdings mit Windowed = TRUE), habe ich dasselbe abgehackte Animationsverhalten, das mich stört.

Um das zu verbessern, hatte ich zunächst noch den Ansatz verfolgt, bei jedem Aufruf von Draw() die Anzahl der vergangenen Ticks mitzugeben und sich daraus jeweils aktuell die zurückgelegten Pixel zu berechnen. Im Ergebnis hat sich das Geruckel zwar deutlich verbessert, ist aber nicht weg.

Schätze dafür bräuchte man Realtime-Multitasking. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum