Autor Beitrag
Waldkauz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Mi 27.05.09 19:19 
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.


ausblenden 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 = 0or (Image4.Top = 0then 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 = 332then
 begin
    Image4.Top:=Image4.Top+bewegung;
     Image4.Left:=Image4.Left+bewegung;
 end;


("bewegung" ist eine globale Variable (integer), die mit 1 belegt wurde)
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
if (Image4.Left = 0or (Image4.Top = 0then 
    bewegung:=bewegung*(-1);

Du hast ja jetzt aber leider die Situation vergessen, die Richtung wieder umzudrehen wenn er unten ist:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm2.Timer4Timer(Sender: TObject);
begin
if (Image4.Left <= 0or (Image4.Top <= 0then 
   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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Mi 27.05.09 23:19 
Nein, leider. Jetzt steckt Image4 sowieso ganz unten und "zittert" ^^
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 27.05.09 23:25 
Das ist ja auch kein Wunder, denn schließlich ist das ziemlich optimistisch programmiert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm2.Timer4Timer(Sender: TObject);
begin
  if (Image4.Left <= 0or (Image4.Top <= 0then 
    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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Mi 27.05.09 23:31 
Jetzt startet Image4 aber gleich in die falsche Richtung und somit aus dem Bild (Image1) hinaus
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 28.05.09 11:16 
user profile iconWaldkauz hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Do 28.05.09 13:46 
sorry, hatte nmoch 'nen kleinen Tippfehler drin...thx