v4.x/Kamera: Unterschied zwischen den Versionen
Mike (Diskussion | Beiträge) (Kameraführung) |
Mike (Diskussion | Beiträge) (→Die Kamera) |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
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 <code>SPIEL</code> 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. <br> | 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 <code>SPIEL</code> 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. <br> | ||
Im Folgenden werdend die Methoden der Kamera erklärt. <br> | Im Folgenden werdend die Methoden der Kamera erklärt. <br> | ||
+ | |||
+ | * <source lang="java">verschiebeKAmera(double deltaX, double deltaY)</source> <i> (Maßeinheit ist "Bildschirm-Meter")</i> | ||
+ | * <source lang="java">setzeKamerafokus(EduActor spielfigur)</source> <i> 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</i> | ||
+ | * <source lang="java">setzeKamerarotation(double grad)</source> <i> Dreht die Kamera als ob sich z.B. ein Flugzeug neigt</i> | ||
+ | * <source lang="java">setzeKamerazoom(double zommfaktor)</source> <i> 30 entspricht normaler Größe, >30 zoomt hinein (vergrößert), <30 zoomt heraus (verkleinert), negative Werte sind sinnlos</i> | ||
+ | |||
+ | Die folgenden kleinen Programme sollen diese vier Methoden erklären: | ||
+ | |||
+ | === Demo 1: Kamera Fokus === | ||
+ | |||
+ | [[Datei:KameraFokus.gif|mini|Spielfigur mit der Kamera fokussieren]] | ||
+ | |||
+ | <source lang="java">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 ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | === Demo 2: Kamera Zoom=== | ||
+ | |||
+ | [[Datei:KameraZoom.gif|mini|Mit der Kamera zoomen]] | ||
+ | |||
+ | <source lang="java">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 ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | === Demo 3: Kamera verschieben === | ||
+ | |||
+ | [[Datei:KameraVerschieben.gif|mini|Die Kamera schwenken]] | ||
+ | |||
+ | <source lang="java">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 ); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | === Demo 4: Kamera rotieren === | ||
+ | |||
+ | [[Datei:KameraRotieren.gif|mini|Die Kamera drehen]] | ||
+ | |||
+ | <source lang="java">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 ); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> |
Aktuelle Version vom 10. Juni 2023, 00:47 Uhr
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 );
}
}
}