Hallo Ulli!
Willkommen in der
DP!
- Bitte hänge entweder das ganze Projekt an, dann kann man sich das in der
IDE anschauen
- oder stell einfach nur den Code hier ein -> in Delphi Tags
Was deinen Code betrifft. Als ich ihn gesehen habe, dachte ich mir ehrlichgesagt: das kann nicht funktionieren. Aber das witzige ist: er funktioniert!
Du musst beim "Erzeugen eines neuen Shapes" (also eigentlich bekommt ja ein bestehendes Shape eine neue Position und wird klein gemacht) einen Richtungsvektor speichern. Also wenn Shape1 links oben "neu erzeugt" wurde, musst du irgendwo speichern das es sich nach links oben bewegen soll. Das kann eine Variable oder ein Array oder whatever sein.
Delphi-Quellcode:
shape1.left:=shape1.left + 3;
shape1.top:=shape1.top +3;
Shape1.height:=shape1.height + 1;
shape1.width:=shape1.width +1;
Und jetzt musst du diese ganzen "starren" Dinger gegen etwas ersetzen was diese Variable (Richtungsvektor?) berücksichtigt.
Übrigens - auch wenn dir das jetzt noch zuviel ist - wäre dieses Projekt absolut IDEAL um das erste mal OBJEKTE auszuprobieren. Weil:
- Du erstellst den Typ TStern
- du erstellst 5 Instanzen davon. zB. Stern1, Stern2, ...
- Diese Objekte bekommen Eigenschaften wie Position, Geschwindigkeit, Grösse, Vektor und so weiter,
Und bei jedem Timer wird die Position des Objektes um Geschwindigkeit in Richtung Vektor verschoben. Dann das Shape dorthinzeichnen - fertig!
Aber du kannst es ruhig auch so machen - für den Anfang. Wobei es schön wäre, noch einiges in Prozeduren auszulagern...
PS: Fast vergessen: randomize wird nur einmal aufgerufen! Also zB. im form.create.
PPS: "If (shape1.left or shape1.top )>= 600 then..."
Das ist ganz falsch!