Skip to content

Camera (Kamera)1

Bei Spielen wie Pac-Man oder Pong bleibt der Bildschirm statisch. Bei weit mehr Spielen hingegen bewegt sich das Bild mit der Hauptfigur mit. Die Zeichenebene ist unendlich weit, das Spielfenster jedoch nicht. Es kann also immer nur ein begrenzter, rechteckiger Bereich der Zeichenebene im Fenster dargestellt werden. Dieser Bereich wird bestimmt von der Kamera. Die Kamera blickt auf die Zeichenebene. Sie „schneidet“ ein Rechteck mit den Maßen des Fensters aus und projiziert dies auf den Bildschirm. Der Rest der Zeichenebene ist also nicht sichtbar.

Verschieben der Kamera

Kamerafahrt ohne Bounds

Die Kamera lässt sich folgendermaßen verschieben:

public void moveFocus(Vektor delta)

public void moveFocus(double deltaX, double deltaY)

Hiermit verschiebt man die Kamera. Im folgenden Beispiel wird die Kamera um (2|2) verschoben.

camera().moveFocus(new Vektor(2, 2));

// Oder alternativ:
camera().moveFocus(2, 2);

Die Kamera wurde um (2|2) verschoben...

... und dadurch ändert sich das Bild im Fenster

Die Kamera lässt sich also mit dieser Methode einfach und beliebig verschieben.

Fokus

Kaum ein Spiel verlangt eine unabhängige Bewegung der Kamera. Fast immer ist ein bestimmtes Objekt (in der Regel das, das gesteuert wird) dauerhaft im Fokus:

public Camera focus(Actor focus)

Damit übergibt man der Kamera ein neues Fokus-Objekt. Dieses Objekt wird fortan immer in der Mitte des Bildes sein.

Die Fokuseinstellung lässt sich auch problemlos wieder beenden:

public Camera removeFocus()

Zusätzlich kann man das Fokusverhalten spezifizieren:

offset (Fokus-Verzug)

Zum einen muss der Fokus nicht immer exakt im Zentrum des Bildes sein, über den Aufruf der folgenden Methode kann man einen Verzug setzen:

public Camera offset(Vector offset)

Hierbei wird die Kamera immer um den Verzug vom Zentrum des Fokus-Objektes wegbewegt. Kamera ohne Fokus-Verzug. Das Fokus-Objekt ist genau in der Mitte.

'Kamera mit Fokusverzug von (0|-2) – Siehe Vektor links oben. Soviel wird das Bild vom eigentlichen Zentrum (gestrichelt) wegbewegt. Diese Einstellung bietet sich z.B. für Jump n' Run-Spiele an

bounds (Kameragrenzen)

Auch muss die Kamera dem Fokusobjekt nicht bis ins Nirvana folgen – oder sich manuell bis zur Unendlichkeit verschieben lassen; man kann der Kamera eine "Grenze" vorschreiben, über die sie niemals gehen wird. Diese Grenze wird als BoundingRechteck beschrieben.

public Camera bounds(Bounds bounds)

Kamerafahrt mit Bounds

Dieses Bounding-Rechteck beschreibt die Fläche auf der Zeichenebene, die diese Kamera niemals übertreten wird. Die Grenzen der Kamera müssen natürlich ausreichend groß sein.

Sinnvolle Werte für die Kamera-Bounds sind solche, bei denen die Höhe und Breite größer als die des Spielfensters ist.