v4.x/Kamera
Inhaltsverzeichnis
Die Kamera
Bisher haben wir das Grafik-Fenster als die gesamte Welt des Spiels angesehen. Das muss aber nicht so sein. Die Welt kann sehr viel größer sein als der im Grafik-Fenster gezeigte Ausschnitt. Die Klasse SPIEL
verfügt für den Fall, dass die Welt größer ist als das Grafik-Fenster über Methoden, das Grafik-Fenster in der Welt wie eine Film-Kamera zu verschieben, die Kamera zu rotieren, auf ein Objekt zu fokussieren und automatisch mit diesem mitwandern zu lassen oder auch in die Welt hinein oder aus dieser heraus zu zoomen.
Im Folgenden werdend die Methoden der Kamera erklärt.
- (Maßeinheit ist "Bildschirm-Meter")
verschiebeKAmera(double deltaX, double deltaY)
- Die Kamera folgt automatisch dem übergebenen Objekt, setzt es ins Zentrum des Grafikfensters und verschiebt die Welt dahinter z.B. nach links anstatt die Spielfigur nach rechts zu verschieben
setzeKamerafokus(EduActor spielfigur)
- Dreht die Kamera als ob sich z.B. ein Flugzeug neigt
setzeKamerarotation(double grad)
- 30 entspricht normaler Größe, >30 zoomt hinein (vergrößert), <30 zoomt heraus (verkleinert), negative Werte sind sinnlos
setzeKamerazoom(double zommfaktor)
Die folgenden kleinen Programme sollen diese vier Methoden erklären:
Demo 1: Kamera Fokus
public class Test_Fokus
extends SPIEL
{
private FIGUR bird;
public Test_Fokus()
{
super( 450 , 300 );
super.setzeHintergrundgrafik("Flappy-Hintergrund.gif");
this.bird = new FIGUR("Flappy-Bird.png");
this.bird.verschiebenUm( -22 , 2. );
this.bird.macheDynamisch();
this.bird.setzeGeschwindigkeit( 3 , 0 );
super.setzeKamerafokus(this.bird);
}
@Override
public void tasteReagieren( int code )
{
this.bird.wirkeImpuls( 0 , 250 );
}
}
Demo 2: Kamera Zoom
public class Test_Zoom
extends SPIEL
{
private FIGUR bird;
private double zoomWert;
public Test_Zoom()
{
super( 450 , 300 );
super.setzeHintergrundgrafik("Flappy-Hintergrund.gif");
this.bird = new FIGUR("Flappy-Bird.png");
this.bird.verschiebenUm( 0 , -3 );
super.setzeKamerafokus( this.bird );
this.zoomWert = 30;
super.setzeKamerazoom( this.zoomWert );
}
@Override
public void tasteReagieren( int code )
{
if ( code == TASTE.RAUF )
{
this.zoomWert = this.zoomWert + 5;
}
else if (code == TASTE.RUNTER )
{
this.zoomWert = this.zoomWert - 5;
}
super.setzeKamerazoom( this.zoomWert );
}
}
Demo 3: Kamera verschieben
public class Test_Verschieben
extends SPIEL
{
private FIGUR bird;
public Test_Verschieben()
{
super( 450 , 300 );
super.setzeHintergrundgrafik("Flappy-Hintergrund.gif");
this.bird = new FIGUR("Flappy-Bird.png");
this.bird.verschiebenUm( 0 , -3 );
}
@Override
public void tasteReagieren( int code )
{
if ( code == TASTE.RAUF )
{
super.verschiebeKamera( 0 , 1 );
}
else if (code == TASTE.RUNTER )
{
super.verschiebeKamera( 0 , -1 );
}
else if (code == TASTE.LINKS )
{
super.verschiebeKamera( -1 , 0 );
}
else if (code == TASTE.RECHTS )
{
super.verschiebeKamera( 1 , 0 );
}
}
}
Demo 4: Kamera rotieren
public class Test_Rotation
extends SPIEL
{
private FIGUR bird;
public Test_Rotation()
{
super( 450 , 300 );
super.setzeHintergrundgrafik("Flappy-Hintergrund.gif");
this.bird = new FIGUR("Flappy-Bird.png");
this.bird.verschiebenUm( 0 , -3 );
}
@Override
public void tasteReagieren( int code )
{
if (code == TASTE.LINKS )
{
super.rotiereKamera( 5 );
}
else if (code == TASTE.RECHTS )
{
super.rotiereKamera( -5 );
}
}
}