v4.x/Klasse FIGUR: Unterschied zwischen den Versionen
Mike (Diskussion | Beiträge) (→Klasse FIGUR) |
Mike (Diskussion | Beiträge) K (→Weitere Zustände und Übergänge hinzufügen) |
||
(32 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 12: | Zeile 12: | ||
== Klasse FIGUR == | == Klasse FIGUR == | ||
− | Einer <code>FIGUR</code> können mehrere Bilder, Bildfolgen, Spritesheets oder animierte GIFs zugeordnet werden. Deshalb wird jedem Bild, Bilderfolge, Spritesheet oder animiertem GIF in der Regel zusätzlich ein Zustand zugewiesen werden. Dieser Zustand ist ein beliebiger Name, den man der Bildfolge | + | Einer <code>FIGUR</code> können mehrere '''Bilder''', '''Bildfolgen''', '''Spritesheets''' oder '''animierte GIFs''' zugeordnet werden. Deshalb wird jedem Bild, Bilderfolge, Spritesheet oder animiertem GIF in der Regel zusätzlich ein '''''Zustand''''' zugewiesen werden. Dieser Zustand ist ein beliebiger Name, den man der Bildfolge entsprechend aussagekräftig benennen sollte. Der Zustandsname dient später dazu, zwischen diesen Zuständen (situationsbedingt) hin und her zu wechseln. |
− | |||
− | * Konstruktor für normale Bilder (PNG, JPG, GIF) <source lang="java">FIGUR(String Bilddatei)</source> | + | === Konstruktoren === |
+ | |||
+ | '''Es gibt 4 Konstruktoren der Klasse <code>FIGUR</code>:''' <br> | ||
+ | |||
+ | [[Datei:Hase.png|mini|Einzel Bild]] | ||
+ | * Konstruktor für '''normale Bilder''' (PNG, JPG, GIF) <source lang="java">FIGUR(String Bilddatei)</source><source lang="java">hase_bild = new FIGUR( "Hase.png" );</source> | ||
<i>Die Bilddatei muss mit Endung angegeben werden und im BlueJ-Projekt-Ordner liegen! <br> | <i>Die Bilddatei muss mit Endung angegeben werden und im BlueJ-Projekt-Ordner liegen! <br> | ||
Dieser einfache Konstruktor verzichtet auf Übergabe eines Zustandsnamens und vergibt intern den Namen "standard"</i> | Dieser einfache Konstruktor verzichtet auf Übergabe eines Zustandsnamens und vergibt intern den Namen "standard"</i> | ||
− | * Konstruktor für animierte GIFs <source lang="java">FIGUR(String Zustandsname, String Bilddatei)</source> | + | [[Datei:Hase boxen anim.gif|mini|GIF aninmiert]] |
+ | * Konstruktor für '''animierte GIFs''' <source lang="java">FIGUR(String Zustandsname, String Bilddatei)</source><source lang="java">hase_anim_gif = new FIGUR( "boxen" , "Hase_boxen_anim.gif" );</source> | ||
<i>Die Bilddatei muss mit Endung angegeben werden und im BlueJ-Projekt-Ordner liegen!</i> | <i>Die Bilddatei muss mit Endung angegeben werden und im BlueJ-Projekt-Ordner liegen!</i> | ||
− | * Konstruktor für Spritesheets <source lang="java">FIGUR(String Zustandsname, String Bilddatei, int | + | [[Datei:hase stehen spritesheet 4 1.png|mini|Spritesheet 4x1]] |
+ | * Konstruktor für '''Spritesheets''' <source lang="java">FIGUR(String Zustandsname, String Bilddatei, int anz_X, int anz_Y)</source><source lang="java">hase_spritesheet = new FIGUR( "stehen" , "hase_spritesheet.png" , 4 , 1 );</source> | ||
<i>Die Bilddatei muss mit Endung angegeben werden und im BlueJ-Projekt-Ordner liegen! <br> | <i>Die Bilddatei muss mit Endung angegeben werden und im BlueJ-Projekt-Ordner liegen! <br> | ||
− | Spritesheets sind Bildfolgen in rechteckiger Anordnung: | + | Spritesheets sind Bildfolgen in rechteckiger Anordnung: anz_X: Bilder in der Breite, anz_Y: Bilder in der Höhe.</i> |
− | * Konstruktor für Bildfolgen in einem separaten Ordner <source lang="java">FIGUR(String Zustandsname, String Ordnername, String Dateipräfix)</source> | + | [[Datei:Icon-Ordner.png|mini|Ordner mit Bildern]] |
+ | * Konstruktor für '''Bildfolgen in einem separaten Ordner''' <source lang="java">FIGUR(String Zustandsname, String Ordnername, String Dateipräfix)</source><source lang="java">hase_einzelbilder = new FIGUR( "kicken" , "Bilder" , "Hase_kick" );</source> | ||
<i>Der Ordner mit den Einzelbildern muss im BlueJ-Projekt-Ordner liegen! <br> | <i>Der Ordner mit den Einzelbildern muss im BlueJ-Projekt-Ordner liegen! <br> | ||
− | Von den Bildern muss nur der gemeinsame Namens-Anteil (Präfix) angegeben werden. So können nummerierte Bilder "in einem Rutsch" geladen werden.</i> | + | Von den Bildern muss nur der gemeinsame Namens-Anteil (Präfix) angegeben werden. So können nummerierte Bilder "in einem Rutsch" geladen werden.</i> |
+ | |||
+ | === Weitere Zustände und Übergänge hinzufügen === | ||
+ | |||
+ | [[Datei:Hase Kampf.gif|mini|kämpfender Hase]] | ||
+ | Eine <code>FIGUR</code> kann nicht nur einen Zustand und damit nicht nur eine Bildfolge enthalten. Moderne Spielfiguren verfügen über '''situationsbedingte Bildfolgen'''. Hierbei wird '''intern in einen anderen Zustand der Figur umgeschaltet''' und entsprechend eine andere Bildfolge animiert. So kann unser Hase z.B. entweder stehen oder boxen oder kicken. Dabei kann die Animationsgeschwindigkeit für jeden Zustand individuell und unabhängig von den anderen Zuständen eingestellt werden. | ||
+ | Zustände kann man im Code namentlich aktivieren, z.B. innerhalb von Fallunterscheidungen oder allgemein nach gewissen Ereignissen. Geeignete Methoden sind hierfür <code>tick()</code> (zeitgesteuert, wiederkehrend prüfen) oder <code>tasteReagieren(int code)</code> (auf eine Tastatur-Ereignis hin) oder <code>bildAktualisierungReagieren()</code> (bei jedem neu generierten Einzelbild der Bühne). | ||
+ | Man kann auch automatisch nach einem Zustand in einen anderen Übergehen. | ||
+ | |||
+ | Dafür bietet die Klasse <code>FIGUR</code> folgende Methoden an: | ||
+ | |||
+ | * <source lang="java">void fuegeZustandVonEinzelbildHinzu(String neuerZustand , String... Dateipfade)</source> | ||
+ | * <source lang="java">void fuegeZustandVonGifHinzu(String neuerZustand , String Dateiname)</source> | ||
+ | * <source lang="java">void fuegeZustandVonPraefixHinzu(String neuerZustand , String Verzeichnis, String praefix)</source> | ||
+ | * <source lang="java">void fuegeZustandVonSpritesheetHinzu(String neuerZustand , String Bildpfad, int anz_X, int anz_Y)</source> | ||
+ | * <source lang="java">void setzeAnimationsGeschwindigkeit(String Zustand , double sekunden_pro_Bild)</source> | ||
+ | * <source lang="java">void setzeAutomatischenUebergang(String zustandVon, String zustandNach)</source> | ||
+ | * <source lang="java">void setzeZustand(String Zustand)</source> | ||
+ | * <source lang="java">String nenneZustand()</source> | ||
+ | |||
+ | === Code-Beispiel === | ||
+ | |||
+ | [[Datei:Hase Kampf.gif|mini|kämpfender Hase]] | ||
+ | <source lang="java"> | ||
+ | class FIGUR_Zustand_Demo | ||
+ | extends SPIEL | ||
+ | { | ||
+ | private RECHTECK hintergrund; | ||
+ | private FIGUR spielfigur; | ||
+ | |||
+ | public FIGUR_Zustand_Demo() | ||
+ | { | ||
+ | this.hintergrund = new RECHTECK( 5 , 5 ); | ||
+ | this.hintergrund.setzeFarbe( "weiß" ); | ||
+ | this.hintergrund.setzeMittelpunkt( 0 , 0 ); | ||
+ | |||
+ | this.spielfigur = new FIGUR( "stehen" , "hase_stehen_spritesheet_4_1.png" , 4 , 1 ); | ||
+ | this.spielfigur.setzeAnimationsgeschwindigkeit( "stehen" , 0.2 ); | ||
+ | |||
+ | this.spielfigur.fuegeZustandVonGifHinzu( "boxen" , "Hase_boxen_anim.gif" ); | ||
+ | this.spielfigur.setzeAnimationsgeschwindigkeit( "boxen" , 0.2 ); | ||
+ | |||
+ | this.spielfigur.fuegeZustandVonPraefixHinzu( "kicken" , "Bilder" , "Hase_kick" ); | ||
+ | this.spielfigur.setzeAnimationsgeschwindigkeit( "kicken" , 0.2 ); | ||
+ | |||
+ | this.spielfigur.setzeAutomatischenUebergang( "boxen" , "stehen" ); | ||
+ | this.spielfigur.setzeAutomatischenUebergang( "kicken" , "stehen" ); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void tasteReagieren( int code ) | ||
+ | { | ||
+ | switch (code) | ||
+ | { | ||
+ | case TASTE.K : this.spielfigur.setzeZustand( "kicken" ); break; | ||
+ | case TASTE.B : this.spielfigur.setzeZustand( "boxen" ); break; | ||
+ | case TASTE.LINKS : this.spielfigur.spiegelnHorizontal( true ); break; | ||
+ | case TASTE.RECHTS : this.spielfigur.spiegelnHorizontal( false ); break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | [[Datei:Hase kick.gif|mini|animiertes GIF]] | ||
+ | Hier der kickende Hase als Animiertes Gif anstatt 4 Einzelbildern zum Download: | ||
+ | |||
{{4.xTutorialFooter| | {{4.xTutorialFooter| | ||
− | [[v4.x/ | + | [[v4.x/Superklasse_EduActor|Die Superklasse EduActor]] |
}} | }} |
Aktuelle Version vom 12. Juni 2023, 09:56 Uhr
Dies ist ein Tutorial für die Edu-Variante der Engine Alpha 4.x. Eine Übersicht aller Edu-Tutorials siehst du hier.
Inhaltsverzeichnis
Inhalt
In diesem Tutorial:
- erstellst du Figuren aus Einzelbildern, animierten Grafiken, Bildfolgen in Ordnern oder Spritesheets
- weist du einer Figur situationsbedingt andere Bildfolgen / Animationen zu
Klasse FIGUR
Einer FIGUR
können mehrere Bilder, Bildfolgen, Spritesheets oder animierte GIFs zugeordnet werden. Deshalb wird jedem Bild, Bilderfolge, Spritesheet oder animiertem GIF in der Regel zusätzlich ein Zustand zugewiesen werden. Dieser Zustand ist ein beliebiger Name, den man der Bildfolge entsprechend aussagekräftig benennen sollte. Der Zustandsname dient später dazu, zwischen diesen Zuständen (situationsbedingt) hin und her zu wechseln.
Konstruktoren
Es gibt 4 Konstruktoren der Klasse FIGUR
:
- Konstruktor für normale Bilder (PNG, JPG, GIF)
FIGUR(String Bilddatei)
hase_bild = new FIGUR( "Hase.png" );
Die Bilddatei muss mit Endung angegeben werden und im BlueJ-Projekt-Ordner liegen!
Dieser einfache Konstruktor verzichtet auf Übergabe eines Zustandsnamens und vergibt intern den Namen "standard"
- Konstruktor für animierte GIFs
FIGUR(String Zustandsname, String Bilddatei)
hase_anim_gif = new FIGUR( "boxen" , "Hase_boxen_anim.gif" );
Die Bilddatei muss mit Endung angegeben werden und im BlueJ-Projekt-Ordner liegen!
- Konstruktor für Spritesheets
FIGUR(String Zustandsname, String Bilddatei, int anz_X, int anz_Y)
hase_spritesheet = new FIGUR( "stehen" , "hase_spritesheet.png" , 4 , 1 );
Die Bilddatei muss mit Endung angegeben werden und im BlueJ-Projekt-Ordner liegen!
Spritesheets sind Bildfolgen in rechteckiger Anordnung: anz_X: Bilder in der Breite, anz_Y: Bilder in der Höhe.
- Konstruktor für Bildfolgen in einem separaten Ordner
FIGUR(String Zustandsname, String Ordnername, String Dateipräfix)
hase_einzelbilder = new FIGUR( "kicken" , "Bilder" , "Hase_kick" );
Der Ordner mit den Einzelbildern muss im BlueJ-Projekt-Ordner liegen!
Von den Bildern muss nur der gemeinsame Namens-Anteil (Präfix) angegeben werden. So können nummerierte Bilder "in einem Rutsch" geladen werden.
Weitere Zustände und Übergänge hinzufügen
Eine FIGUR
kann nicht nur einen Zustand und damit nicht nur eine Bildfolge enthalten. Moderne Spielfiguren verfügen über situationsbedingte Bildfolgen. Hierbei wird intern in einen anderen Zustand der Figur umgeschaltet und entsprechend eine andere Bildfolge animiert. So kann unser Hase z.B. entweder stehen oder boxen oder kicken. Dabei kann die Animationsgeschwindigkeit für jeden Zustand individuell und unabhängig von den anderen Zuständen eingestellt werden.
Zustände kann man im Code namentlich aktivieren, z.B. innerhalb von Fallunterscheidungen oder allgemein nach gewissen Ereignissen. Geeignete Methoden sind hierfür tick()
(zeitgesteuert, wiederkehrend prüfen) oder tasteReagieren(int code)
(auf eine Tastatur-Ereignis hin) oder bildAktualisierungReagieren()
(bei jedem neu generierten Einzelbild der Bühne).
Man kann auch automatisch nach einem Zustand in einen anderen Übergehen.
Dafür bietet die Klasse FIGUR
folgende Methoden an:
void fuegeZustandVonEinzelbildHinzu(String neuerZustand , String... Dateipfade)
void fuegeZustandVonGifHinzu(String neuerZustand , String Dateiname)
void fuegeZustandVonPraefixHinzu(String neuerZustand , String Verzeichnis, String praefix)
void fuegeZustandVonSpritesheetHinzu(String neuerZustand , String Bildpfad, int anz_X, int anz_Y)
void setzeAnimationsGeschwindigkeit(String Zustand , double sekunden_pro_Bild)
void setzeAutomatischenUebergang(String zustandVon, String zustandNach)
void setzeZustand(String Zustand)
String nenneZustand()
Code-Beispiel
class FIGUR_Zustand_Demo
extends SPIEL
{
private RECHTECK hintergrund;
private FIGUR spielfigur;
public FIGUR_Zustand_Demo()
{
this.hintergrund = new RECHTECK( 5 , 5 );
this.hintergrund.setzeFarbe( "weiß" );
this.hintergrund.setzeMittelpunkt( 0 , 0 );
this.spielfigur = new FIGUR( "stehen" , "hase_stehen_spritesheet_4_1.png" , 4 , 1 );
this.spielfigur.setzeAnimationsgeschwindigkeit( "stehen" , 0.2 );
this.spielfigur.fuegeZustandVonGifHinzu( "boxen" , "Hase_boxen_anim.gif" );
this.spielfigur.setzeAnimationsgeschwindigkeit( "boxen" , 0.2 );
this.spielfigur.fuegeZustandVonPraefixHinzu( "kicken" , "Bilder" , "Hase_kick" );
this.spielfigur.setzeAnimationsgeschwindigkeit( "kicken" , 0.2 );
this.spielfigur.setzeAutomatischenUebergang( "boxen" , "stehen" );
this.spielfigur.setzeAutomatischenUebergang( "kicken" , "stehen" );
}
@Override
public void tasteReagieren( int code )
{
switch (code)
{
case TASTE.K : this.spielfigur.setzeZustand( "kicken" ); break;
case TASTE.B : this.spielfigur.setzeZustand( "boxen" ); break;
case TASTE.LINKS : this.spielfigur.spiegelnHorizontal( true ); break;
case TASTE.RECHTS : this.spielfigur.spiegelnHorizontal( false ); break;
}
}
}
Hier der kickende Hase als Animiertes Gif anstatt 4 Einzelbildern zum Download:
Das Tutorial ist beendet. Das nächste ist Die Superklasse EduActor . Wenn du Feedback für uns hast, melde dich gerne.