Es ließe sich auch wie folgt lösen:
Header
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class st_input
{
public:
~st_input();
void update();
int is_pressed(int key) const;
static st_input& get_instance()
{
static st_input in;
return in;
}
private:
st_input();
private:
unsigned char _keys[256];
};
|
Source
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
st_input::st_input()
{
memset(_keys, 0, 256);
}
st_input::~st_input()
{
}
void st_input::update()
{
GetKeyboardState(_keys);
}
int st_input::is_pressed(int key) const
{
return _keys[key] & 0x80;
}
|
Das sollte fehlerfrei funktionieren. Teste mal ob der Fehler jetzt noch immer auftritt. Was du übrigens nie vergessen darfst ist, das dein Spiel sehr schnell läuft und das, selbst wenn du eine Taste nur kurz antippst, das mehrere Tastendrücke auslöst. Eine gute Input-Klasse bietet deswegen viel mehr Methoden als die hier gezeigte, eine Methode, an.
Das ganze ließe sich natürlich noch um Mausunterstützung erweitern. Es ist dermaßen einfach gehalten, das ich auf Kommentare verzichtet habe.
GetKeyboardState speichert den Status aller Tasten im übergebenen Speicherbereich. Die
st_input::update Methode sollte einmal pro Frame aufgerufen werden.
Anwendungsbeispiel:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
// Innerhalb der Hauptschleife ...
st_input::get_instance().update();
if(st_input::get_instance().is_pressed(VK_SPACE))
{
// TODO: Was immer auch passieren soll.
}
// ...
|
Mit freundlichen Grüßen
Kasenoru