![]() |
konstante bewegung eines objekts durch tastendruck
hallo an alle
ich bin neu hier und hätte mal eine frage. ich hab schon ein wenig gegoogelt und hier hab ich auch schon alles abgesucht... ich möchte ein objekt konstant in ein richtung bewegen während ich eine taste gedrückt halte. bei den bisherigen versuchen bleibe ich entweder in einer endlosschleife hängen oder ich bekomme keine konstante bewegung zu stande. kann mir da jemand helfen? wäre echt nett. lg draggen |
Re: konstante bewegung eines objekts durch tastendruck
Hi! Und Willkommen in der DP!
Was sind denn deine bisherigen Versuche? Das Bewegen des Objekts beim OnKeyDown Ereigniss? Man könnte z.B. einen Timer verwenden und im OnTimer ereignis abfragen, ob die gewünschte Taste gedrückt ist. Falls dies der Fall ist, bewegt der Timer das Objekt einen Schritt weiter. Das sollte gleichmäßig genug sein... |
Re: konstante bewegung eines objekts durch tastendruck
du da kann ich dir leider nid weiter helfen habe selbst das gleiche problem wäre cool wenn endlich mal jemand das erklären könnte
|
Re: konstante bewegung eines objekts durch tastendruck
genau die bisherigen versuche waren alle mit onkeydown-ereignis.
das mit dem timer hab ich mir auch schon überlegt nur hab ich keine ahnung wie ich abfragen kann ob eine bestimmte taste gerade gedrückt ist. könntest du mir bitte ein beispiel schicken? danke schon mal im vorraus |
Re: konstante bewegung eines objekts durch tastendruck
Zitat:
Also hier der Beispielcode, funzt wunderbar!
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject); begin if (getkeystate(vk_left) and 128)=128 then button1.Left:=button1.left-1; //verschiebt den Button eins nach links end; |
Re: konstante bewegung eines objekts durch tastendruck
hey danke funktioniert wunder bar danke
Draggen wusste schon wie das gemeint war :-) nur für waas ist die 128 |
Re: konstante bewegung eines objekts durch tastendruck
danke! sieht auch super aus nur kommt bei mir die fehlermeldung:"Vorgang konnte nicht erzeugt werden: Zugriff verweigert".
|
Re: konstante bewegung eines objekts durch tastendruck
un dann hab ich ne frage wenn ich den button springen lassen will zb langsam 20 pixel hoch un dann schnell wieder runter wie geht das
|
Re: konstante bewegung eines objekts durch tastendruck
@Draggen: Hast du auf deinem Formular auch einen Timer und einen Button erstellt? Und hast du das OnTimer Ereignis im Objektinspektor zugewiesen?
@Lee: Die 128 wird logisch (bit für bit) auf den Rückgabewert von GeyKeyState draufaddiert...Das liegt irgendwie an dem Intergerrückgabewert von GeyKeyState, der kann bei gedrückter Taste glaube ich -127 oder -128 sein... Was ist denn bitte am "hüpfen" anders als am nach links laufen? Du ziehst einfach sagen wir mal von Button.Top 20 Pixel ab und addierst sie hinterher wieder drauf... @Lee: Ihr stellt gerade in 3 oder 4 Threads ziemlich einfache anfängerfragen. Versucht doch mal ein bisschen eigeninitiative zu entwickeln! |
Re: konstante bewegung eines objekts durch tastendruck
klar!!! ich hab nen timer nen button die procedure dem timer zugewiesen
also ich hoffe das ich das noch hinkriege ;) aber ich weiß trotzdem nicht warum diese fehlermeldung auftaucht hättest du sonst noch eine idee? |
Re: konstante bewegung eines objekts durch tastendruck
ich weiß schon wie das mit dem springen geht jedoch wollt ich wissen wie das am realistischsten aus sieht für z.b ein spiel da kann man nämlich viele unter schiedliche varianten benutzen
|
Re: konstante bewegung eines objekts durch tastendruck
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habs mal angehängt... ka wo dein Fehler herkommt...
|
Re: konstante bewegung eines objekts durch tastendruck
procedure TBall.springen;
var f:TColor; x:integer; begin for x:=1 to 50 do begin f:=farbe; farbe:=clwhite; zeichnen; case x of 1..10: My:=My-4; 11..25:My:=My-3; 26..40: My:=My-2; 41..50: My:=My-1; end; farbe:=f; zeichnen; warten(10); end; for x:=50 downto 1 do begin f:=farbe; farbe:=clwhite; zeichnen; case x of 1..10: My:=My+4; 11..25:My:=My+3; 26..40: My:=My+2; 41..50: My:=My+1; end; farbe:=f; zeichnen; warten(10); end; end; das hier ist eine procedure die ich mal in einem spiel benutzt hab um einen ball zum springen zu bringen kannst mal gucken ob dir das irgendwie weiterhilft |
Re: konstante bewegung eines objekts durch tastendruck
Liste der Anhänge anzeigen (Anzahl: 1)
un hier für hoch runter links rechst
|
Re: konstante bewegung eines objekts durch tastendruck
@lee1
Du könntest z.B. beim Tastendruck nach oben eine "geschwindigkeit" definieren.
Delphi-Quellcode:
Im Timer soll dann bei jedem Schritt die Geschwindigkeit kleiner werden, also quasi durch eine Art Erdanziehungskraft:
v_y:=-5
Delphi-Quellcode:
Ist der Button wieder auf seiner Ausgangshöhe "gelandet", setzt du die Geschwindigkeit wieder auf Null:
v_y:=v_y+1
Button1.top:=button1.top+v_y;
Delphi-Quellcode:
Könntet ihr bitte, gerade wenn ihr mehrere Zeilen Delphi Code benutzt die "Delphi-Tags" benutzen (oben auf Delphi-Code klicken), damit der Code besser lesbar ist? Das wäre super nett! :thumb:
v_y:=0;
|
Re: konstante bewegung eines objekts durch tastendruck
also ich habe deine version einmal ausprobiert aber bei mir kommt die selbe fehlermeldung
|
Re: konstante bewegung eines objekts durch tastendruck
kein problem wusste nur nicht wies geht
|
Re: konstante bewegung eines objekts durch tastendruck
Komisch, sieht aber eher so aus, als hättest du irgendwelche Schreib/Lese Berechtigungsprobleme und Delphi kann dir keine Exe Datei kompilieren?!
|
Re: konstante bewegung eines objekts durch tastendruck
also ich kann die exe-datei starten und sie funktioniert auch aber ich muss ja auch irgendwie programmieren können...
|
Re: konstante bewegung eines objekts durch tastendruck
sry ich hab gerade gemerkt das ich überhaupt nichts compilieren kann egal ob es ein leeres projekt oder deins ist
|
Re: konstante bewegung eines objekts durch tastendruck
also vielen dank es funktioniert jetzt
lg draggen |
Re: konstante bewegung eines objekts durch tastendruck
Hast Du eine neue VCL-Formularanwendung erstellt oder öffnest Du nur ein neues Formular. Letztes lässt sich nicht "compilieren" / starten.
|
Re: konstante bewegung eines objekts durch tastendruck
das formular oder sogar das ganze projekt lies sich nicht starten aber es geht jetzt wieder trotzdem danke
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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