Hi,
ich habe folgendes Spiel:
In einer Endlosschleife (procedure OnIdle) wird mein Spiel mit Hilfe von
OpenGL gezeichnet. In dieser Endlosschleife gibt es nun auch ein paar tastaturabfragen, die ich mit getAsyncKeyState() realisiert habe. Das Ganze sieht folgendermaßen aus:
Delphi-Quellcode:
if (getAsyncKeyState(112) <> 0) and (KeyPressDelay[112]=0) then
begin
Player.setWarping(not Player.getWarping);
KeyPressDelay[112] := 25;
end;
if not Player.getWarping then
begin
if (getAsyncKeyState(113)<> 0) and (KeyPressDelay[113]=0) then
begin
if (getAsyncKeyState(113) <> 0) then
ShowMessage('Test-2');
ShowMessage('Test-1');
KeyPressDelay[GameSettings.getKeyMap(7)] := 15;
end;
end;
Wie man erkennen kann, soll die Taste 113 (F2) nur etwas bewirken, wenn Player.getWarping=false ist. Dieses Attribut kann man mit F1 (key 112) wechseln. Da das Ganze eine Endlosschleife ist, muss zwischen den einzelnen Abfragen auch eine Pause eingefügt werden, damit die Keys nur alle ~0.5 Sekunden ausgelöst werden. Dazu ist das KeyPressDelay da, das später im Code auf 0 runter gezählt wird.
Nun zu meinem Problem:
Wenn ich nun mit F1 das Warping einschalte, reagiert das Programm wie gewollt nicht mehr auf Tastendrücke von F2. Drücke ich währen der Warping Phase nun aber F2, und setze danach Warping per Druck auf F1 wieder auf False, dann wird ein Tastendruck von F2 ausgelöst! Und das extrem skurile: Die MessageBox mit dem Inhalt "Test-2" wird NICHT angezeigt! MessageBox mit dem Inhalt "Test-1" hingengen schon! Das ist ist doch eigentlich gar nicht möglich, da die Bedingungen zum Anzeigen der Test-2 Box ja die selbe ist wie die Bedingung, dass der Tatsendruck überhaupt ausgelöst wird. Müsste also auf jeden Fall auch angezeigt werden o.O
Ich weiß nun nicht woran das liegt, habt Ihr hoffentlich ein paar Ideen?
Gutes Neues wünsche ich Euch allen!
Grüße
Passi