Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

30.05.2010, 14:40

Design Frage

Ein schönen Tag an alle,



weil ich grade dabei bin, alle Funktionen die nützlich sein könnte in eine Art Framework zu packen, z.B. die Initalisierung von Direct3D, Matheklassen usw. . Momentan bin ich dabei die Nachrichtenschleife zu erstellen und wollte fragen wie ich es mit der Zeit am besten mache... Hier mal ein Beispiel von mir



C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
void Message(void (*Render)(), void (*Move)(float))
 {
  float fFrequenz; // Frequenz in float
  float fTime; // Aktuelle Zeit
  LONGLONG llStartTime; // Startzeit
  LONGLONG llEndTime; // Endzeit
  LONGLONG llFrequenz; // Frequenz
  MSG msg;
 
  ZeroMemory(&msg, sizeof(msg));
  fTime = 0.0f;
 
  QueryPerformanceFrequency((LARGE_INTEGER*)(&llFrequenz)); // Aktuelle Frequenz bestimmen
  fFrequenz = static_cast<float>(llFrequenz); // Akteuelle Frequenz in float casten
 
  while(true)
  {
   QueryPerformanceCounter((LARGE_INTEGER*)&llStartTime); // Startzeit bestimmen
   while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
   {
    // Nachrichtenbehandlung
    TranslateMessage(&msg);
    DispatchMessage(&msg);
   }
   if(msg.message == WM_QUIT)
    break;
 
   Render(); // Rendern
 
   if(Move)
   {
    if(fTime == 0.0f)
    {
     // Endzeit bestimmen falls fTime gleich 0 ist
     QueryPerformanceCounter((LARGE_INTEGER*)&llEndTime);
     // Aktuelle zeit berechnen
     fTime = static_cast<float>((llEndTime - llStartTime) / fFrequenz);
    }
    Move(fTime); // Movefunktion aufrufen und ihr die Zeit übergeben
   }
   // Endzeit bestimmen
   QueryPerformanceCounter((LARGE_INTEGER*)&llEndTime);
   if(llEndTime == llStartTime)
    fTime = 0.00001f;
   else
    fTime = static_cast<float>((llEndTime - llStartTime) / fFrequenz); // Aktuelle Zeit berechnen
  }
 }




Schonmal vielen Dank im voraus

Mfg male

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

2

02.06.2010, 11:09

Was willst du denn "mit der Zeit am besten mache"? Am sinnvollsten finde ich eine Timerklasse, die entsprechende Funktionen hat: Gesamtzeit abrufen, Zeit seit dem letzten Aufruf etc. Als Beispiel kann ich jetzt sogar DMC anfuehren, da war es zum Glueck genau so, und ich konnte ganz einfach QueryPerformanceCounter durch timeGetTime ersetzen und so einen groben Bug fixen.