Also gut.
Hier mal die Hauptschleife des Spiels:
|
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
|
//Hauptschleife des Spiels durchlaufen
//
while (m_bGameRun == true)
{
//Events bearbeiten
ProcessEvents();
//Framework updaten und Buffer löschen
g_pFramework->Update();
g_pFramework->Clear();
//Frames pro Sekunde messen
//FPS();
//Hintergrundbild rendern
m_pSpriteBackground->Render();
//Schachbrett rendern
m_pSpriteSchachbrett->SetPos(150.0f, 50.0f);
m_pSpriteSchachbrett->Render();
//Beenden Button rendern
m_pSpriteBeenden->SetPos(250.0f, 10.0f);
m_pSpriteBeenden->Render();
//Figuren rendern
g_pFiguren->Render();
//Modus (1vs1) der KI mitteilen
g_pKI->SetMode(m_b1vs1);
//Cursor updaten und rendern
int x;
int y;
int Button;
Button = SDL_GetMouseState(&x, &y);
m_pCursor->UpdateMouse(x, y, Button);
m_bGameRun = m_pCursor->Render(&m_b1vs1);
SDL_ShowCursor(true);
//Buffer flippen
g_pFramework->Flip();
}
|
|
C-/C++-Quelltext
|
1
|
m_pCursor->UpdateMouse(x, y, Button);
|
Das teilt der Cursor-Klasse nur die Mausposition und nachher wird ja die Funktion
|
C-/C++-Quelltext
|
1
|
m_bGameRun = m_pCursor->Render(&m_b1vs1);
|
aufgerufen.
Und diese prüft jetzt eben, ob, und wo ein klick stattgefunden hat, und zum Schluss wird der Cursor mittels SDL_WarpMouse(m_XPos, m_YPos); auf diese Position gesetzt.
|
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 CGame::ProcessEvents()
{
SDL_Event Event;
//Gab es ein Event?
if(SDL_PollEvent(&Event))
{
//Ja, also schauen, welches
switch(Event.type)
{
//Beenden?
case (SDL_QUIT):
{
m_bGameRun = false;
} break;
//Wurde eine Taste gedrückt?
case (SDL_KEYDOWN):
{
switch (Event.key.keysym.sym)
{
case (SDLK_ESCAPE):
{
//Ja, also Spiel beenden
m_bGameRun = false;
} break;
}
} break;
}
}
} //ProcessEvents
|
Die Nachrichtenschleife. Das Spiel sollte also auch per Tastendruck zu beenden sein, ist es aber nicht!
Ich hoffe, dieser Code hilft euch weiter, mir weiterzuhelfen!
Edit:
Wenn ich
|
C-/C++-Quelltext
|
1
|
m_bGameRun = m_pCursor->Render(&m_b1vs1);
|
nicht aufrufe, funktioniert die Nachrichtenschleife einwandfrei.
Und wenn ich sie aufrufe, gehts schon nicht mehr. Und an dem Code der Funktion kanns auch nicht wirklich liegen, denn wenn ich alles auskommentier, außer
|
C-/C++-Quelltext
|
1
|
return true;
|
, gehts auch noch nicht.