Zu dem Problem der Steuerung hab ich irgendwann ma ne Klasse geschrieben, weiß nich, ob du die verwenden willst... hab die mal bisschen überarbeitet:
|
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
|
class Keys
{
public:
Keys() {}
~Keys() {}
void Update()
{
_LastTime=_Time;
_Time=timeGetTime();
_TimeDiff=_Time-_LastTime;
memcpy_s( _Oldkeys, sizeof(_Oldkeys), _Keys, sizeof(_Keys)); // _Oldkeys=_Keys;
// _Keys neu belegen, Wenn die Taste neu gedrückt ist wird sie mit KeyDownDelayed() sofort erkannt, sonst wird die Druckzeit erhöht
for (unsigned long i=0; i<256; ++i)
{
_Keys[i] = (GetAsyncKeyState(i) & 0x8000)!=0;
if (_Keys[i] && !_Oldkeys[i])
_TimeElapsed[i]=100;
else if (_Keys[i])
_TimeElapsed[i] += _TimeDiff;
}
}
// Taste neu gedrückt?
bool KeyPressed(unsigned long vKey)
{
return (_Keys[vKey] && !(_Oldkeys[vKey]));
}
// Taste grad losgelassen?
bool KeyReleased(unsigned long vKey)
{
return (!(_Keys[vKey]) && _Oldkeys[vKey]);
}
// Taste ist gedrückt
bool KeyDown(unsigned long vKey)
{
return (_Keys[vKey]);
}
// Taste ist gedrückt und wurde in den letzten 100ms nicht als gedrückt gemeldet
bool KeyDownDelayed(unsigned long vKey)
{
if (_Keys[vKey] && (_TimeElapsed[vKey] >=100))
{
_TimeElapsed[vKey]=0;
return true;
}
return false;
}
private:
bool _Oldkeys[256];
bool _Keys[256];
unsigned long _TimeElapsed[256];
unsigned long _Time, _LastTime, _TimeDiff;
};
|
Wenn das Game in einer Schleife läuft muss man nur noch einmal pro schleife Keys::Update() aufrufen, dann kann man den Status der Tasten abfragen - Abfragecodes wie bei GetAsyncKeyState()
KeyDownDelayed() bringt eine Verzögerung von min. 100ms zwischen 2 positiven Auswertungen einer durchgängig gedrückten Taste.
Falls bereits an anderer Stelle Zeitmessungen vorgenommen werden ist es sicher sinnvoll, diesen Wert einfach an Update zu übergeben, anstatt da eine eigene Rechnung zu machen.
Zur Verwendung brauch man nat. eine Instanz der Klasse.