AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit getAsyncKeyState()

Ein Thema von Passi077 · begonnen am 1. Jan 2007 · letzter Beitrag vom 1. Jan 2007
Antwort Antwort
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#1

Problem mit getAsyncKeyState()

  Alt 1. Jan 2007, 01:17
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Problem mit getAsyncKeyState()

  Alt 1. Jan 2007, 02:20
Hi Passi,

auch für dich ein Gutes Neues Jahr.

Ohne es ausprobiert zu haben und nur anhand der Beschreibung der API-Funktion GetAsyncKeyState() im PSDK glaube ich, dass du eine falsche Erwartungshaltung hast.

Zitat von Passi077:
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!
Das Async im Funktionsnamen sagt es schon: Für jede Taste wird das Up oder Down registriert und gepuffert, bis dein Programm (oder ein beliebiges anderes) die Funktion aufruft.

Zitat von Passi077:
Und das extrem skurile: Die MessageBox mit dem Inhalt "Test-2" wird NICHT angezeigt!
Weil gerade vorher die Funktion bereits aufgerufen wurde und den gepufferten Zustand abgefragt hat, läuft der zweite Aufruf ins Leere.

Freundliche Grüße
  Mit Zitat antworten Zitat
passsy

Registriert seit: 1. Jan 2007
124 Beiträge
 
#3

Re: Problem mit getAsyncKeyState()

  Alt 1. Jan 2007, 02:42
Delphi-Quellcode:
begin
 if Player.getWarping=false then
  begin
   if GetKeyState(VK_F12) < 0 then
    begin
    [...]
    end;
   end;
 if GetKeyState(VK_F12) >= 0 then
  begin
  [...]
  end;
 end;
probiers ma so
Pascal
  Mit Zitat antworten Zitat
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#4

Re: Problem mit getAsyncKeyState()

  Alt 1. Jan 2007, 11:54
Ahja, so funktioniert das

Vielen Dank euch beiden!

Grüße
Passi
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz