Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi konstante bewegung eines objekts durch tastendruck (https://www.delphipraxis.net/141107-konstante-bewegung-eines-objekts-durch-tastendruck.html)

Draggen 2. Okt 2009 18:28


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

alleinherrscher 2. Okt 2009 18:32

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...

LEE1 2. Okt 2009 18:34

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

Draggen 2. Okt 2009 18:40

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

alleinherrscher 2. Okt 2009 18:41

Re: konstante bewegung eines objekts durch tastendruck
 
Zitat:

Zitat von LEE1
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

Geiler Kommentar :D

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;

LEE1 2. Okt 2009 18:44

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

Draggen 2. Okt 2009 18:46

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".

LEE1 2. Okt 2009 18:48

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

alleinherrscher 2. Okt 2009 18:52

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!

Draggen 2. Okt 2009 18:57

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?

LEE1 2. Okt 2009 18:58

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

alleinherrscher 2. Okt 2009 19:01

Re: konstante bewegung eines objekts durch tastendruck
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habs mal angehängt... ka wo dein Fehler herkommt...

Draggen 2. Okt 2009 19:03

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

LEE1 2. Okt 2009 19:05

Re: konstante bewegung eines objekts durch tastendruck
 
Liste der Anhänge anzeigen (Anzahl: 1)
un hier für hoch runter links rechst

alleinherrscher 2. Okt 2009 19:06

Re: konstante bewegung eines objekts durch tastendruck
 
@lee1

Du könntest z.B. beim Tastendruck nach oben eine "geschwindigkeit" definieren.

Delphi-Quellcode:
v_y:=-5
Im Timer soll dann bei jedem Schritt die Geschwindigkeit kleiner werden, also quasi durch eine Art Erdanziehungskraft:
Delphi-Quellcode:
v_y:=v_y+1
Button1.top:=button1.top+v_y;
Ist der Button wieder auf seiner Ausgangshöhe "gelandet", setzt du die Geschwindigkeit wieder auf Null:

Delphi-Quellcode:
v_y:=0;
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:

Draggen 2. Okt 2009 19:07

Re: konstante bewegung eines objekts durch tastendruck
 
also ich habe deine version einmal ausprobiert aber bei mir kommt die selbe fehlermeldung

Draggen 2. Okt 2009 19:09

Re: konstante bewegung eines objekts durch tastendruck
 
kein problem wusste nur nicht wies geht

alleinherrscher 2. Okt 2009 19:09

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?!

Draggen 2. Okt 2009 19:14

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...

Draggen 2. Okt 2009 19:17

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

Draggen 2. Okt 2009 19:21

Re: konstante bewegung eines objekts durch tastendruck
 
also vielen dank es funktioniert jetzt
lg draggen

Die Muhkuh 2. Okt 2009 19:22

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.

Draggen 2. Okt 2009 19:25

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