[gelöst]Keydown und Tastaturpuffer

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

[gelöst]Keydown und Tastaturpuffer

Beitrag von Marsmännchen »

Hallo,

ich hab mal wieder ein Problem :roll:

In meinem Spiel gibt es einen Replaymodus (bedeutet: wenn du den Level zu Ende gespielt hast, kannst du dir nochmal deinen Weg durchs Minenfeld anzeigen lassen und bewundern, wie die Spielfigur die nun sichtbaren Minen elegant beiseite lässt). Funktioniert soweit. Als Sahnehäubchen versuche ich jetzt noch während des Replays zwei Gimmicks zu installieren: Solange die Taste 'F' (für 'fast') gedrückt gehalten wird, soll das Replay deutlich schneller ablaufen... für Ungeduldige. Später implementiere ich auch noch Esc-Taste um Replay abzubrechen.

Okay, das Drücken der F-Taste fange ich mit Keydown-Event ab, mit folgendem Code:

Code: Alles auswählen

procedure TMainForm.PitchKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_F then
    begin
      if FReplayMode = True then
        begin
          ReplayTimer.Interval:= 100;
          Abort;
        end
    end
  else     ... // Abfangen anderer Tasten   
Nun passiert aber folgendes: nachdem man ein bisschen die F-Taste gedrückt hat, blockiert das Ganze und es ertönen unter Windows schnelle Knackgeräusche (nein, ich drücke die Taste nicht mit aller Gewalt :mrgreen: ). Ich schätze mal, dass der Tastaturpuffer überläuft, habe aber keinen Ansatz, wie ich das verhindern könnte.

Wisst ihr, wie ich das verhindern kann?
Zuletzt geändert von Marsmännchen am Mi 21. Dez 2016, 13:40, insgesamt 1-mal geändert.
Ich mag Pascal...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2811
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Keydown und Tastaturpuffer

Beitrag von m.fuchs »

Ohne jetzt auf das konkrete Problem einzugehen, wie wäre es denn mit einem Alternativvorschlag:

Benutze doch die F-Taste nur zum Umschalten zwischen Normal und Schnell. Oder noch besser: + und - um die Geschwindigkeit in mehreren Stufen zu verändern. Das löst auch dein Problem. :)
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Keydown und Tastaturpuffer

Beitrag von Marsmännchen »

m.fuchs hat geschrieben:Ohne jetzt auf das konkrete Problem einzugehen, wie wäre es denn mit einem Alternativvorschlag:

Benutze doch die F-Taste nur zum Umschalten zwischen Normal und Schnell. Oder noch besser: + und - um die Geschwindigkeit in mehreren Stufen zu verändern. Das löst auch dein Problem. :)
Och, eigentlich hast du recht...
Ich setze das Thema trotzdem noch nicht auf [gelöst]. Vielleicht hat ja jemand anderes noch eine Lösung und das Problem könnte auch Andere interessieren.

Danke!
Ich mag Pascal...

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Keydown und Tastaturpuffer

Beitrag von Mathias »

Vielleicht hilft dir dieses Beispiel weiter, ich habe extra für dich ein "F" eingebaut.
Dateianhänge
Pacman_Steuerung.zip
(125.45 KiB) 65-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Keydown und Tastaturpuffer

Beitrag von Marsmännchen »

Dankeschön, das funktioniert genau so, wie ich mir das vorgestellt hatte :D ... ich verstehe nur nicht, warum :shock:

Liegt das allein daran, dass du die gedrückte Taste in deinem Keys-Array als gedrückt markierst? In der eigentlichen Routine prüfst du dann, ob dieser oder jener Key gedrückt wurde...
Ich mag Pascal...

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Keydown und Tastaturpuffer

Beitrag von Mathias »

Liegt das allein daran, dass du die gedrückte Taste in deinem Keys-Array als gedrückt markierst? In der eigentlichen Routine prüfst du dann, ob dieser oder jener Key gedrückt wurde...
Genau, dies ist der Grund.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: [gelöst]Keydown und Tastaturpuffer

Beitrag von Marsmännchen »

Okay, danke :)
Ich mag Pascal...

Antworten