![]() |
Re: solange taste gedrücktt tue! ???
Also so langsam versteh ich gar nix mehr..aber egal
Mein Programm sieht jetzt folgendermaßen aus:
Delphi-Quellcode:
was für mich auch eigentlich logisch ist und eigentlich funktionieren müsste.
procedure TForm1.Timer1Timer(Sender: TObject);
begin if GetAsyncKeyState(vk_left) <0 then walk(1); if GetAsyncKeyState(vk_right)<0 then walk(3); end; Ich verstehe es so: die procedure checkt (jetzt alle 100 ms)ob eine pfeiltaste (links oder rechts) gerade gedrückt wird und wenn ja , dasnn soll sich die figur entsprechend bewegen. Das ende vom lied ist, das die scheiß procedure gar nix macht!! das heißt: schon wieder ein logischer fehler in meinen / unserem plan :? enabled ist auch auf true gesetzt. gruß der flo |
Re: solange taste gedrücktt tue! ???
Versuche mal meinen Code, er kommt auch ohne Timer aus.
Delphi-Quellcode:
var
ImagePos: integer; const verschieben= 5;//je größer um so schneller verschieben procedure TForm1.FormCreate(Sender: TObject); begin ImagePos:= Image1.Left; Image1.Parent.DoubleBuffered:= true; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of vk_Left: begin dec(ImagePos, verschieben); Image1.Left:= ImagePos; end; VK_RIGHT: begin inc(ImagePos, verschieben); Image1.Left:= ImagePos; end; end; end; |
Re: solange taste gedrücktt tue! ???
Zitat:
|
Re: solange taste gedrücktt tue! ???
die letzte version klapt auf jedenfall ganz gut.
simpel aber wirksam! Ich weiß zwar noch nicht , ich damit auskommen (weil das alles noch viel komlepxer werden soll; aber für den anfang reicht es aus! außerdem habe ich für heute genug von dem programm!! Also vielen Dank für euere Hilf! :lol: Bye der flo |
Re: solange taste gedrücktt tue! ???
Außerdem hat die oben ohne Timer auskommende Funktion noch einen Nachteil: Kommt später mal Oben und Unten dazu, kann man nur in eine Richtung gleichzeitig, also zB entweder nach links, oder nach oben. Bei der Timerversion ist das nicht so.
|
Re: solange taste gedrücktt tue! ???
Zitat:
ob ich nun im Timer prüfe welche taste gedrückt wurde oder vorher ist doch eigentlich egal. So hat man halt für jede bewegung nen eigenen timer und führt wenn die linke pfeiltaste gedrückt wurde den timer für die bewegung nach links aus, bis die taste losgelassen wird. Bei rechter pfeiltaste entsprechend den timer für den rechts-bewegung. oder hab ich das problem falsch verstanden???? |
Re: solange taste gedrücktt tue! ???
Inherited hatte recht, wenn man 2 Tasten bei meinem Code drückte, konnte man das Image nur in einer Richtung bewegen. Hier das ganze mit 1 Timer.
Delphi-Quellcode:
var
ImagePosX, ImagePosY: integer; const verschieben= 5;//je größer um so schneller verschieben procedure TForm1.FormCreate(Sender: TObject); begin ImagePosX:= Image1.Left; ImagePosY:= Image1.Top; Image1.Parent.DoubleBuffered:= true; Timer1.Interval:= 100; Timer1.Enabled:= false; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Timer1.Enabled= false then Timer1.Enabled:= true; //Timer1Timer(Sender); end; procedure TForm1.Timer1Timer(Sender: TObject); begin if GetAsyncKeyState(VK_LEFT)< 0 then begin dec(ImagePosX, verschieben); Image1.Left:= ImagePosX; end; if GetAsyncKeyState(VK_RIGHT)< 0 then begin inc(ImagePosX, verschieben); Image1.Left:= ImagePosX; end; if GetAsyncKeyState(VK_UP)< 0 then begin dec(ImagePosY, verschieben); Image1.Top:= ImagePosY; end; if GetAsyncKeyState(VK_DOWN)< 0 then begin inc(ImagePosY, verschieben); Image1.Top:= ImagePosY; end; end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin Timer1.Enabled:= false; end; |
Re: solange taste gedrücktt tue! ???
moin leute
also ich hab heut den vorschlag von bitsetter in die tat umgesetzt. Und es funktioniert nicht. Da hab ich mal mit F7 immer nur die einzelnen Anweisungen durchlaufen lassen und hab festgestellt, dass der Timer bei einen Tastendruck nicht angeht.Wenn ich eine Pfeiltaste drücke meldet sich die procedure keydown aber der Timer nicht. genausowenig die procedure KeyUp. Was ist da nur los? gruß der flo |
Re: solange taste gedrücktt tue! ???
Lass den Timer immer laufen!
Also nicht erst starten o.s.ä. ;) und dann im Intervall überprüfen ob sich eine Taste gedrückt hat. |
Re: solange taste gedrücktt tue! ???
Genau. Das mit dem OnKeyDown und OnKeyUp ist sinnlos, da im Timer ja eh überprüft wird, ob die Taste gedrückt ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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