Du willst doch, daß sich jeder Planet zeichnet und nicht die Welt oder?
Dann änder mal folgendes :
- nimm beim planet ein TBitmap statt TImage
- gib jdem Planeten X und Y-Variablen
- übergib in der Draw-Funktion den canvas der Form
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TPlanet.draw(Canvas : TCanvas); begin if Bild <> nil then Canvas.draw(X, Y, Bild); end; |
den Canvas kannst du ja dem TWorld-Objekt im Tick mitgeben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TWorld.tick(Canvas : TCanvas);
procedure TForm1.TickEvent; begin FWorld.tick(Canvas); end; |
dann fehlt noch die Add-Funktion, die machst du z.B. so:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TWorld.addPlanet(Planet : TPlanet); begin setlength(FPlanets, length(FPlanets) + 1); FPlanets[high(FPlanets)]:= Planet; end; |
wichtig : Planeten später wieder freigeben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| destructor TWorld.free; VAR i : Integer; begin for i:= 0 to high(FPlanets) do FPlanets[i].free: setLength(FPlanets, 0); end; |
Jetzt mußt du nur noch den Planeten ein gültiges Bitmap zuweisen und dann sollte es gehen.
Ansonsten gewöhn dir am besten gleich an für alle Klassen einen Constructor und einen Destructor zu schreiben.