AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein zu bestimmten Ereignissen Tasten ignorieren
Thema durchsuchen
Ansicht
Themen-Optionen

zu bestimmten Ereignissen Tasten ignorieren

Ein Thema von Bambennos · begonnen am 9. Apr 2011 · letzter Beitrag vom 9. Apr 2011
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#1

AW: zu bestimmten Ereignissen Tasten ignorieren

  Alt 9. Apr 2011, 15:15
Von Andorra habe ich zugegebenermaßen keinen Schimmer, aber mir fällt auf, dass Du sehr viel redundaten Code schreibst. Ich habe das KeyPress einmal gekürzt:
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #27 then
    Close
  else if (Key in ['a','w','s','d']) and (Spieler.IsIdle) then
    begin
      Spieler.FDistance := 40;
      Spieler.IsMoving := true;
      case Key of
        'a': Spieler.RRichtung := Links;
        'w': Spieler.RRichtung := Hoch;
        'd': Spieler.RRichtung := Rechts;
        's': Spieler.RRichtung := Runter;
      end;
      Application.ProcessMessages;
    end;
end;
Schau einmal ob die Zeile mit dem Application.ProcessMessages etwas bringt. Wenn nicht, kannst Du sie wieder löschen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bambennos

Registriert seit: 18. Feb 2011
6 Beiträge
 
#2

AW: zu bestimmten Ereignissen Tasten ignorieren

  Alt 9. Apr 2011, 15:34
Ok Danke, das gekürtzte funktioniert prima ;D
Was soll das Application.ProcessMessages bewirken? - Falls das mein Problem lösen sollte - nein leider nicht
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: zu bestimmten Ereignissen Tasten ignorieren

  Alt 9. Apr 2011, 15:57
Uberprüfe in Deiner Key abfrage, vor der Ausführung des keys, ob das Ende der Position erreicht ist!
Wenn ja, dann neues Bild laden Position setzten und key ausführen!

Gruss alfold
  Mit Zitat antworten Zitat
Bambennos

Registriert seit: 18. Feb 2011
6 Beiträge
 
#4

AW: zu bestimmten Ereignissen Tasten ignorieren

  Alt 9. Apr 2011, 16:09
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #27 then
    Close
  else if (Key in ['a','w','s','d']) and (Spieler.IsIdle) and not (Spieler.MapVerlassen) then
    begin
      Spieler.FDistance := 40;
      Spieler.IsMoving := true;
      case Key of
        'a': Spieler.RRichtung := Links;
        'w': Spieler.RRichtung := Hoch;
        'd': Spieler.RRichtung := Rechts;
        's': Spieler.RRichtung := Runter;
      end;
      Application.ProcessMessages;
    end
    else
    begin
      Spieler.Spielerzeichnen;
      Spieler.MapVerlassen := false;
    end;
end;

So funktionierts nicht... Er läuft trotzdem immer weiter :/
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: zu bestimmten Ereignissen Tasten ignorieren

  Alt 9. Apr 2011, 16:14
Und wo setzt Du Spieler.MapVerlassen?
  Mit Zitat antworten Zitat
Bambennos

Registriert seit: 18. Feb 2011
6 Beiträge
 
#6

AW: zu bestimmten Ereignissen Tasten ignorieren

  Alt 9. Apr 2011, 16:17
Delphi-Quellcode:
   // Wenn er aus der Karte herausgeht, dann
    if Spieler.FXposTile >= 26 then //rechts
    begin
    Spieler.MapVerlassen := true;
    Spieler.FXposTile := 0;
    MapTeilX := MapTeilX + 1;
    Map.Start;
    end;

    if Spieler.FYposTile > 20 then //unten
    begin
    Spieler.MapVerlassen := true;
    Spieler.FYposTile := 0;
    MapTeilY := MapTeilY +1;
    Map.Start;
    end;

    if Spieler.FXposTile < 0 then //links
    begin
    Spieler.MapVerlassen := true;
    Spieler.FXposTile := 25;
    MapTeilX := MapTeilX - 1;
    Map.Start;
    end;

    if Spieler.FYposTile < 0 then //oben
    begin
    Spieler.MapVerlassen := true;
    Spieler.FYposTile := 19;
    MapTeilY := MapTeilY - 1;
    Map.Start;
    end;
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: zu bestimmten Ereignissen Tasten ignorieren

  Alt 9. Apr 2011, 21:06
Kann es sein Das Du da zweimal den key abfragst wenn er gedrückt ist?

Delphi-Quellcode:
....
if FDistance <= 0 then
  begin
  if ((RRichtung = Links) and (GetAsyncKeyState(65) <> 0) or // A //<----
     (RRichtung = Rechts) and (GetAsyncKeyState(68)<> 0 ) or // D
     (RRichtung = Hoch) and (GetAsyncKeyState(87)<> 0) or // W
     (RRichtung = Runter) and (GetAsyncKeyState(83)<> 0)) then // S
     begin
       FDistance := 5;
       end
  else
    FMoving := false;
  end;
Gruss alfold
  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 11:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz