Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi solange taste gedrücktt tue! ??? (https://www.delphipraxis.net/84837-solange-taste-gedruecktt-tue.html)

inherited 22. Jan 2007 18:11

Re: solange taste gedrücktt tue! ???
 
Ja, Sorry, ich hab mich da in der Schnelle vertippt.

flori-da 22. Jan 2007 18:14

Re: solange taste gedrücktt tue! ???
 
:wall: ich dummerchen. trotzdem geht es auch richtig geschrieben nicht.
und ich hab es doch so gemacht, wie ihr es mir gesagt habt.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if GetAsyncKeyState(vk_left)<0 then
    walk(1)
  if GetAsyncKeyState(vk_right)<0 then
    walk(3);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Timer1.Enabled:=true;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Timer1.Enabled:=false;
end;
:gruebel:

sirius 22. Jan 2007 18:17

Re: solange taste gedrücktt tue! ???
 
wegen getasync... kannst du das KEyDown und KeyUp weglassen und einfach den Timerenabled auf true setzen solange das Image sich bewegen soll.

1ceman 22. Jan 2007 18:20

Re: solange taste gedrücktt tue! ???
 
mach doch einfach 2 timer, einen für links und einen für rechts.
dann überprüfst du im FormKeyDown ob die linke oder die rechte pfeiltaste gedrückt wird und startest
dann den timer für links oder rechts.

Klaus01 22. Jan 2007 18:33

Re: solange taste gedrücktt tue! ???
 
- war mumpitz -> gelöscht

Grüße
Klaus

inherited 22. Jan 2007 19:16

Re: solange taste gedrücktt tue! ???
 
Zitat:

Zitat von 1ceman
mach doch einfach 2 timer, einen für links und einen für rechts.
dann überprüfst du im FormKeyDown ob die linke oder die rechte pfeiltaste gedrückt wird und startest
dann den timer für links oder rechts.

Und was soll das bringen?

flori-da 22. Jan 2007 19:37

Re: solange taste gedrücktt tue! ???
 
Ich hab jetzt 2 Timer eingebaut. Also zumindestens bewegt sich die Figur!
Aber ohne das ich eine Taste drücke und nur nach rechts.
Ich hab auch das Intervall des Timers auf 200 gestellt , damit es flüssig wirkt und dafür die Schrittgröße verkleinert.
(Schrittgröße = Pixelzahl die das bild bei der procedure walk verschoben wird)

also hier ist der neue Quelltext, der mir neue rätsel aufweißt.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  walk(1);
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  walk(3)
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if GetAsyncKeyState(vk_left)<0 then
    Timer1.Enabled:=true;
  if GetAsyncKeyState(vk_right)<0 then
    Timer2.enabled:=true;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if GetAsyncKeyState(vk_left)<0 then
    Timer1.Enabled:=false;
  if GetAsyncKeyState(vk_right)<0 then
    Timer2.Enabled:=false;
end;
bei der gelegenheit könnte mir vllt auch jemand erklären, was die function getasynckeystate bewirkt.
das raffe ich nicht so ganz? :gruebel:

aber schon mal danke für euere unterstützung
grüße der flo

zecke 22. Jan 2007 19:40

Re: solange taste gedrücktt tue! ???
 
Wenn sie sich bewegt bevor Du was machst, hast du wahrscheinlich vergessen die Timer von Haus aus, auf false zu setzen ;) (im OI, Enabled:=false)

inherited 22. Jan 2007 19:44

Re: solange taste gedrücktt tue! ???
 
Nein...
So war das nicht gemeint. laso:
GetAsyncKeystate liefert dir in DEM MOMENT wo du es abfragst, ob gerade in diesem Moment die Taste gedrückt ist. Dann brauchst du also keinen Timer mehr für die Bewegung, sondern nur einen Timer in dem du mit GetAsyncKeystate abfragst, ob grad die nach-links-taste gedrückt ist oder nicht.

Um flori-da noch einmal zu zitieren:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if GetAsnycKeyState(vk_left)<0 then
    Player.MoveLeft;
  if GetAsyncKeyState(vk_right)<0 then
    Player.MoveRight
  ...
end;
Das kommt in einen Timer, der ständig mit einem Interval von ca. 200 ms aktiv ist. Der überprüft dann alle 200 ms ob gerade die nach links taste oder die nach rehctsteste gedrückt ist und macht dann dies und jenes ;)

sirius 22. Jan 2007 19:47

Re: solange taste gedrücktt tue! ???
 
Zitat:

Zitat von flori-da
bei der gelegenheit könnte mir vllt auch jemand erklären, was die function getasynckeystate bewirkt.
das raffe ich nicht so ganz? :gruebel:

MSDN: GetAsyncKeyState


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:21 Uhr.
Seite 2 von 4     12 34      

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