![]() |
|
|
#1
|
|
Landefrachter
Registriert seit: Mär 2004
Beiträge: 633
|
Delphi-Kenner gesucht
![]() ![]() Habt ihr da eine Lösung, wie man das Problem lösen kann? (dieser Thread ist nicht als "Wie-finde-ich-Delphi-Thread" zu verstehen, also Meinungen in der Richtung einfach stecken lassen) |
|
|
|
|
|
#2 |
|
Beiträge: n/a
|
Wie behandelst du denn die Eingaben bisher? In einer OnKeyDown Funktion fragst du ab welche Taste gedrückt wurde und startest eine passende Funktion?
Der Ball soll bei festgehaltener Taste immer schneller werden? Poste am besten mal ein paar Codeschnippsel. |
|
|
|
#3 |
|
Landefrachter
Registriert seit: Mär 2004
Beiträge: 633
|
Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=38 then begin
Timer1.Enabled:=true;
end;
if Key=37 then begin
if X1>0 then begin
Image1.Canvas.Pen.Color:=clWhite;
Image1.Canvas.Ellipse(X1,Y1,X2,Y2);
X1:=X1-5; X2:=X2-5;
Image1.Canvas.Pen.Color:=clBlack;
Image1.Canvas.Ellipse(X1,Y1,X2,Y2);
end;
end;
if Key=39 then begin
if X2<600 then begin
Image1.Canvas.Pen.Color:=clWhite;
Image1.Canvas.Ellipse(X1,Y1,X2,Y2);
X1:=X1+5; X2:=X2+5;
Image1.Canvas.Pen.Color:=clBlack;
Image1.Canvas.Ellipse(X1,Y1,X2,Y2);
end;
end;
end;
Kleine Erklärungen zum besseren Verständniss: X1,Y1,X2,Y2 sind die Koordinaten für die Ellipse Um die Bewegung darzustellen male ich einmal die Elipse weg und dann wieder hin Der Timer sorgt dafür, dass der Ball hochfliegt und wieder runter kommt, wenn nötig kann ich den auch noch abbilden, aber ich glaube dass ich das nicht machen brauche. |
|
|
|
|
|
#4 |
|
Beiträge: n/a
|
Bei der Abfrage der Taste in der Keydown Funktion wird doch wahrscheinlich davon ausgegangen, dass der Nutzer nur eine Taste drücken wird (nehme ich einfach mal an). Insofern bringt deine IF Konstruktion nicht so sehr viel: KeyDown wird bei jedem Tasteneregnis neu aufgerufen. Alle Tastenabfragen werden in deinem Quellcode aber nacheinander abgearbeitet.
Deine IF Abfragen werden immer ALLE durchgearbeitet, einfacher und wesentlich effektiver wär hier eine CASE Anweisung - wie geschaffen für Tastaturabfragen, notfalls auch eine geschachtelte IF-Abfrage: Code:
IF (TASTE1) ELSE IF (TASTE2) ELSE IF (TASTE3) Der Timer wird auch wieder beendet? Aus Code:
if Key=37 then begin
if X1>0 then begin
|
|
|
|
#5 |
|
Landefrachter
Registriert seit: Mär 2004
Beiträge: 633
|
Ja, stimmt, ich neige irgendwie noch ganz stark dazu, zu kleinkariert zu programmieren. Du hast selber schon mein Problem erkannt, dass KeyDown immer von neuen gestartet wird, wenn ich eine Tage betätige, nur das möchte ich ja weg haben. Weißt du eine andere Möglichkeit, wie ich das geschickt in Delphi anstelle? Falls du vllt nicht weißt, was ich meine, dann schreib mich einfach in ICQ an, ich glaube ich habe hier drin meine Nummer notiert. Wenn nicht, dann einfach hier die Lösung rein
|
|
|
|
|
|
#6 |
|
Beiträge: n/a
|
Normalerweise behandelt man Key events so, dass man ne Operation startet, wenn sie nochj nicht laeuft, und die Operation beendet, wenn das entsprechende KeyUp event kommt. Dann hat man auch den Stress mit den Key repeats nicht. Genau so, wie Du es bereits mit dem Timer1 machst. Machste Dir halt nen Timer2 fuer die X Bewegung.
|
|
|
|
#7 |
|
Landefrachter
Registriert seit: Mär 2004
Beiträge: 633
|
Echt eine starke Idee, wäre ich so nie drauf gekommen. Danke für den Tip. Ich glaube damit kann der Thread gelöscht werden, weil mein Problem gelöst ist.
|
|
|
|
![]() |
|
||||||
| Themen-Optionen | |
| Ansicht | |
|
|









