![]() |
Re: Bild kreisen lassen
Hallo.
Dein ursprünglicher Denkfehler liegt darin, dass du bei Berührung mit dem Rand nur einmal in die andere Richtugn verschiebst. Beispiel: Das Image berührt das Fenster am linken Rand. Also bewegst du es nach rechts. Dann berührt es den rand aber nicht mehr und es wird wieder nach links bewegt etc... Durch die vier Timer wird dein Programm unnötig komplex. Ich habe dir mal ein kleines Beispiel geschrieben, das mit nur einem Timer auskommt. Den Bewegungsvektor merkt sich das Programm in einem TPoint. Bei Kollision wird dieser vektor dann angepasst.
Delphi-Quellcode:
Edit: Bist du sicher, dass du Delphi für .NET verwendest? Das erste Delphi,d as .NET unterstütze war Delphi 8. Du schreibst aber, du benutzt unter anderem Delphi 7.
type
TForm1 = class(TForm) Image1: TImage; Timer1: TTimer; Button1: TButton; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } bewegung: tpoint; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin // timer1.enabled wird umgekehrt, aus True wird False, aus False wird True timer1.Enabled := not timer1.Enabled; // Prüfen ob Timer läuft und Caption anpassen if timer1.Enabled then button1.Caption := 'Halt!' else button1.Caption := 'Lauf!'; end; procedure TForm1.FormCreate(Sender: TObject); begin // bewegung initialisieren bewegung := point(3,3); // 3 nach rechts, 3 nach unten end; procedure TForm1.Timer1Timer(Sender: TObject); begin // Kollision Links if image1.Left <=0 then bewegung.X := 3; // Kollision Rechts if image1.Left+image1.Width >= ClientWidth then bewegung.X := -3; // Kollision Oben if image1.Top <=0 then bewegung.Y := 3; // Kollision Unten if image1.Top+image1.height >= ClientHeight then bewegung.Y := -3; // Bewegung ausführen image1.Left := image1.Left+bewegung.X; image1.Top := image1.Top+bewegung.Y; end; |
Re: Bild kreisen lassen
ist mit BEWEGUNG : image1.left gemeint?
|
Re: Bild kreisen lassen
"Bewegung" ist eine private Variable. (guck mal unter { Private-Deklarationen }). Die Variable ist vom Typ
![]() |
Re: Bild kreisen lassen
Ich habe das , wie Du oben beschrieben hast, programmiert. Aber das Bild bewegt sich dann schräg nach unten, es soll sich aber im Viereck bewegen (nach rechts, nach unten, usw.).
|
Re: Bild kreisen lassen
Ich habe zwei bilder so programmiert:
das eine ( Mond "kreisen" lassen):
Delphi-Quellcode:
das andere ( Sonne "kreisen" lassen):
procedure TForm1.Button9Click(Sender: TObject);
begin if Button9.caption='Mond Start' then begin Timer1.enabled:=true; Button9.Caption:='Mond stop' end else if Button9.caption='Mond stop' then begin Timer1.enabled:=false;Timer2.enabled:=false;Timer3.enabled:=false;Timer4.enabled:=false;Button9.caption:='Mond Start' end procedure TForm1.Timer1Timer(Sender: TObject); begin image12.left:=image12.Left+10; Timer1.Interval:=10; if image12.left<=895 then begin Timer1.enabled:=true; Timer2.enabled:=false end end; procedure TForm1.Timer2Timer(Sender: TObject); begin image12.top:=image12.Top+10; Timer2.Interval:=10; if image12.Top=640 then begin Timer2.enabled:=false;Timer3.enabled:=true end end; procedure TForm1.Timer3Timer(Sender: TObject); begin image12.left:=image12.left-10; Timer3.Interval:=10; if image12.Left<=8 then begin Timer3.enabled:=false; Timer4.Enabled:=true end end; procedure TForm1.Timer4Timer(Sender: TObject); begin image12.Top:=image12.Top-10; Timer4.Interval:=10; if image12.Top=8 then begin Timer4.Enabled:=false; Timer1.Enabled:=true end end;
Delphi-Quellcode:
Das mit der Sonne funktioniert, das mit dem Mond aber nicht.
procedure TForm1.Button10Click(Sender: TObject);
begin if button10.caption='Sonne Start' then begin Timer5.enabled:=true; button10.Caption:='Sonne stop' end else if button10.caption='Sonne stop' then begin Timer5.enabled:=false;Timer6.enabled:=false;Timer7.enabled:=false;Timer8.enabled:=false;button10.caption:='Sonne Start' end ; end; procedure TForm1.Timer5Timer(Sender: TObject); begin image1.left:=image1.Left-10; Timer5.Interval:=40; if image1.left<=8 then begin Timer6.enabled:=true; Timer5.enabled:=false end end; procedure TForm1.Timer6Timer(Sender: TObject); begin image1.top:=image1.Top+10; Timer6.Interval:=40; if image1.Top = 640 then begin Timer7.enabled:=true; Timer6.enabled:=false end end; procedure TForm1.Timer7Timer(Sender: TObject); begin image1.left:=image1.left+10; Timer7.Interval:=40; if image1.Left >= 895 then begin Timer7.enabled:=false; Timer8.Enabled:=true end end; procedure TForm1.Timer8Timer(Sender: TObject); begin image1.Top:=image1.Top-10; Timer8.Interval:=40; if image1.Top = 10 then begin Timer8.Enabled:=false; Timer5.Enabled:=true end end; Ich habe keine Ahnung, warum das mit dem Mond (sind ja beide identisch von der programmierung) nicht so funktioniert. :?: Könnt ihr mir dabei helfen? ICh sag schonmal DANKE. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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