Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit Bewegung eines Image --> Bleibt stehen
Waldkauz - Mi 27.05.09 19:19
Titel: Problem mit Bewegung eines Image --> Bleibt stehen
Hallo
Also ich hab das Image1, auf welchem sich das kleinere Image2 mithilfe eines Timers von der rechten unteren Ecke so lange diagonal nach oben und unten Bewegen soll, bis der Timer wieder deaktiviert wird.
Jetzt habe ich aber das Problem, dass das Image2 vorher schräg rauffährt, und dann zwar wieder runter fährt, aber dann in der Ecke (Ausgangsposition) stehen bleibt und nicht wieder rauffährt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm2.Timer4Timer(Sender: TObject);
if (Image4.Left = 0) or (Image4.Top = 0) then bewegung:=bewegung*(-1);
if (Image4.Left <= (Image1.Width-Image4.Width) ) or (Image4.Top <= (Image1.Height - Image4.height) ) then begin Image4.Left:=Image4.Left-bewegung; Image4.Top:=Image4.Top-bewegung; end else begin Image4.Top:=Image4.Top-bewegung; Image4.Left:=Image4.Left-bewegung; end;
if (image4.Left = 557 ) and (image4.Top = 332) then begin Image4.Top:=Image4.Top+bewegung; Image4.Left:=Image4.Left+bewegung; end; |
("bewegung" ist eine globale Variable (integer), die mit 1 belegt wurde)
ffgorcky - Mi 27.05.09 20:54
Also ich würde für die Richtungsanzeige (bei nur 2 Richtungen) eher eine boolsche Variable nehmen, z.B. so eine, die ich dann unter den Form-Variablen deklarieren würde:
Delphi-Quelltext
1:
| var vonLinksObenNachRechtsUnten:bool; |
Aber Deine Lösung, die Bewegung durchs Mal-nehmen mit einer negativen Eins umzudrehen ist natürlich auch nicht schlecht!
Oben hast Du ja die Umdrehsituation:
Delphi-Quelltext
1: 2:
| if (Image4.Left = 0) or (Image4.Top = 0) then bewegung:=bewegung*(-1); |
Du hast ja jetzt aber leider die Situation vergessen, die Richtung wieder umzudrehen wenn er unten ist:
Delphi-Quelltext
1: 2:
| if (Image4.Left >= Image1.Width) or (Image4.Top >= Image1.Height) then bewegung:=bewegung*(-1); |
Also insgesamt müsste Dein Quelltext doch so das ganze erfüllen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm2.Timer4Timer(Sender: TObject); begin if (Image4.Left <= 0) or (Image4.Top <= 0) then bewegung:=bewegung*(-1) else if (Image4.Left >= Form1.Width) or (Image4.Top >= Form1.Height) bewegung:=bewegung*(-1); Image4.Left:=Image4.Left-bewegung; Image4.Top:=Image4.Top-bewegung; end; |
- Oder habe ich da jetzt gerade nicht so ganz den Überblick über das Problem bekommen?
Waldkauz - Mi 27.05.09 23:19
Nein, leider. Jetzt steckt Image4 sowieso ganz unten und "zittert" ^^
Yogu - Mi 27.05.09 23:25
Das ist ja auch kein Wunder, denn schließlich ist das ziemlich optimistisch programmiert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm2.Timer4Timer(Sender: TObject); begin if (Image4.Left <= 0) or (Image4.Top <= 0) then Bewegung := 1 else if (Image4.Left >= Form1.Width) or (Image4.Top >= Form1.Height) then Bewegung := -1;
Image4.Left := Image4.Left + Bewegung; Image4.Top := Image4.Top + Bewegung; end; |
Ist
Bewegung positiv, wandert das Bild nach unten links, sonst nach oben rechts. Stößt es oben links an, wird
Bewegung positiv, damit es wieder runter geht, und umgekehrt.
Was ihr programmiert habt, kann zu einer Art "Zittern" führen, weil die Richtig ständig umgedreht wird, wenn sich das Bild außerhalb des zulässigen Bereiches befindet, aber mit der "Sprungweite", nämlich
Bewegung, nicht mehr in einem "Satz" (Timer-Event) zurückfindet. Meine Lösung dagegen schiebt das Bild strikt in die richtige Richtung.
Waldkauz - Mi 27.05.09 23:31
Jetzt startet Image4 aber gleich in die falsche Richtung und somit aus dem Bild (Image1) hinaus
Yogu - Do 28.05.09 11:16
Waldkauz hat folgendes geschrieben : |
Jetzt startet Image4 aber gleich in die falsche Richtung und somit aus dem Bild (Image1) hinaus |
Dir ist aber schon klar, dass der Code das Bild im
Formular, nicht in einem anderen Bild hin- und herbewegt? Du musst die Vergleiche noch entsprechend anpassen.
Waldkauz - Do 28.05.09 13:46
sorry, hatte nmoch 'nen kleinen Tippfehler drin...thx
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!