Spiele in Lazarus objektorientiert programmieren/Ein einfaches Spiel mit mehreren Objekten

Aus ZUM-Unterrichten

Hinzufügen weiterer Objekte

Auf die Dauer ist ein einfaches Fenster, auf dem außer dem Hinweis nichts zu sehen ist, doch recht langweilig. Wir fügen aus dem Reiter „Additional“ geometrisches Objekt, genauer: ein Objekt vom Typ TShape hinzu. Hierfür klicken wir zunächst auf das Symbol in der Symbolleiste und dann irgendwo in das Formular.

Man kann das nun entstandene Objekt mit dem Namen Shape1 nun nachträglich mit der Maus verschieben. Man kann die Form (Shape) und die Farbe (Color) im Objektinspektor verändern.

Natürlich geht das auch innerhalb der entsprechenden Methoden des Programms. Will man z.B., dass die Koordinaten des Objekts sich beim Drücken einer Maustaste irgendwo im Fenster (außer auf die geometrische Form selbst) ändern, so könnte das so aussehen.


procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Shape1.Left:=10;
  Shape1.Top:=20;
end;

Wichtig: Da wir es hier jetzt mit mehreren Objekten zu tun haben, müssen wir im Objektinspektor zunächst tatsächlich Form1 auswählen und dann im Reiter „Ereignisse“ rechts neben dem Ereignis OnMouseDown einen Doppelklick ausführen.

In der zweiten Zeile kann man erkennen, dass innerhalb der Methode noch die Variablen X und Y zur Verfügung stehen. Diese liefern die Informationen, wo genau der Mauszeiger stand, als die Maustaste gedrückt wurde. Das lässt sich nutzen, um unsere geometrische Form mit der linken oberen Ecke genau an die Position des Mauszeigers zu setzen, wenn die Maustaste gedrückt ist. Will man, dass das geometrische Objekt z.B. unsichtbar wird, wenn man auf das geometrische Objekt selbst klickt, so muss man im Objekt Shape1 im Objektinspektor auswählen und dann dort neben dem Ereignis OnMouseDown den Doppelklick ausführen.

Die so entstandene Methode können wir nun ergänzen.

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Shape1.Visible:=FALSE;
end;

Wichtig: Egal, welches Objekt (hier: Fenster oder geometrisches Objekt) das Ereignis auslöst; die zugehörige Methode gehört in Lazarus immer zum Fenster.