Version vom 10. Juni 2023, 00:47 Uhr von Mike (Diskussion | Beiträge) (Die Kamera)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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.

  • verschiebeKAmera(double deltaX, double deltaY)
    
    (Maßeinheit ist "Bildschirm-Meter")
  • setzeKamerafokus(EduActor spielfigur)
    
    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
  • setzeKamerarotation(double grad)
    
    Dreht die Kamera als ob sich z.B. ein Flugzeug neigt
  • setzeKamerazoom(double zommfaktor)
    
    30 entspricht normaler Größe, >30 zoomt hinein (vergrößert), <30 zoomt heraus (verkleinert), negative Werte sind sinnlos

Die folgenden kleinen Programme sollen diese vier Methoden erklären:

Demo 1: Kamera Fokus

Spielfigur mit der Kamera fokussieren
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

Mit der Kamera zoomen
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

Die Kamera schwenken
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

Die Kamera drehen
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 );
        }
    }
}