Hallihallo liebe Community!
nach längerer "C++ Abstinenz" wollt ich mich nun wieder ans programmieren machen, und den Anfang sollte dabei die Beherrschung der SDL darstellen. Da ich das in Etappen erledigen wollte, fing ich an ein einfaches Programm zu erstellen, welches ein SDL-fenster generiert (mit türkiser surface), mehr nicht. Natürlich sollte der nutzer es auch schliessen können...... Doch hier liegt das Problem: wenn man das Fenster anklickt, hängt es sich auf und man muss über die Windows-funktion "sofort beenden" dem ganzen ein Ende bereiten. Klickt man jedoch das im Hintergrund laufende Konsolen fenster an und drückt eine Tase schliesst es sich sofort. Ich habe den Verdacht das ich die Befehlsabfrage irgendwie vermurckst hab. So siehts aus:
|
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#include "SDL.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
int ScreenWidth = 800;
int ScreenHeight = 600;
int ColorDepth = 16;
bool bFullscreen = false;
SDL_Event Event;
SDL_Surface *m_pScreen; // Surface für den Screen
Uint8 *m_pKeystate; // Array für aktuellen Tastaturstatus
if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1 )
{
cout << "SDL konnte nicht initialisiert werden!" << endl;
cout << "Fehlermeldung: " << SDL_GetError () << endl;
SDL_Quit ();
return (false);
}
// Vollbild oder Fenstermodus einstellen
if (bFullscreen == true)
{
m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth,
SDL_HWSURFACE | SDL_DOUBLEBUF |
SDL_FULLSCREEN);
}
else
{
m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth,
SDL_HWSURFACE | SDL_DOUBLEBUF);
}
// Prüfen, ob alles funktioniert hat
if (m_pScreen == NULL)
{
cout << "Videomodus konnte nicht gesetzt werden!" << endl;
cout << "Fehlermeldung: " << SDL_GetError () << endl;
SDL_Quit ();
return (false);
}
// Zeiger auf internes Array für Tastaturstatus ermitteln
m_pKeystate = SDL_GetKeyState (NULL);
SDL_FillRect (m_pScreen, NULL,SDL_MapRGB (m_pScreen->format, 0, 255, 255));
// Gab es ein Event?
if (SDL_PollEvent (&Event))
{
// Ja, also schauen welches
switch (Event.type)
{
// Beenden?
case (SDL_QUIT):
{
SDL_Quit () ;
return (0);
} break;
// Wurde eine Taste gedrückt?
case (SDL_KEYDOWN):
{
switch (Event.key.keysym.sym)
{
case (SDLK_ESCAPE):
{
// Ja, also Spiel beenden
SDL_Quit ();
return (0);
} break;
}
} break;
}
}
system ("Pause");
return (0);
}
|
Des weiteren bleibt noch zu sagen das ich das meiste aus der "framework klasse" des 12. kapitels aus Heiko Kalistas Buch übernommen hab. Muss ich vielleicht irgendwie eine Update-funktion mit einbringen? Ich hoffe ihr könnt mir helfen und bedanke mich schon mal im Voraus ganz herzlich für Antworten!