Ich programmiere gerade ein Spiel mit der TribaseEngine. Ich verwende aber nicht die Funktion tbDoMessageLoop der TribaseEngine, da mir die Funktionszeiger nicht ins Konzept passen. Leider kann ich so auch nicht auf die automatische Pausefunktion zurück greifen. Das ist die Run() Funktion meiner Haupt Spielklasse:
|
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
|
void CBendball::Run()
{
MSG message; ZeroMemory(&message, sizeof(MSG));
DWORD oldTime = timeGetTime();
float diffTime = 0;
while(m_pGameState && message.message != WM_QUIT)
{
// Windows Nachrichtenschleife
while(PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
if (message.message == WM_ACTIVATE)
{
m_bPaused = !m_bPaused;
}
TranslateMessage(&message);
DispatchMessage(&message);
}
// Zeit seit letztem Aufruf berechnen
diffTime = (float)(timeGetTime() - oldTime);
oldTime = timeGetTime();
if (!m_bPaused)
{
// Spielschleife
Move(diffTime);
Render(diffTime);
}
}
}
|
Leider funktioniert das nicht. Das Spiel läuft auch bei Fokusverlust weiter was sich dadurch bemerkbar macht, dass die tbDirectInput Klasse mir das ganze Log vollspamt (Weil sie die Tastatur nicht abfragen kann).
Kann das daran liegen, dass man Nachrichten nur in der Callbackfunktion verarbeiten kann? (was ich mir kaum vorstellen kann). Wenn ja muss ich noch ein eigenes Fenster registrieren -_-