Dokumentation verbessert

This commit is contained in:
ngb
2022-06-29 22:26:18 +02:00
parent e5c2c0e569
commit e411b5025e

View File

@@ -126,7 +126,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* Erstellt eine neue Zeichenmaschine mit Standardwerten für Titel und * Erstellt eine neue Zeichenmaschine mit Standardwerten für Titel und
* Größe. * Größe.
* <p> * <p>
* Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr Details. * Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr
* Details.
*/ */
public Zeichenmaschine() { public Zeichenmaschine() {
this(APP_NAME + " " + APP_VERSION); this(APP_NAME + " " + APP_VERSION);
@@ -136,7 +137,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* Erstellt eine neue Zeichenmaschine mit Standardwerten für Titel und * Erstellt eine neue Zeichenmaschine mit Standardwerten für Titel und
* Größe. * Größe.
* <p> * <p>
* Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr Details. * Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr
* Details.
* *
* @param run_once {@code true} beendet die Zeichenmaschine nach einem * @param run_once {@code true} beendet die Zeichenmaschine nach einem
* Aufruf von {@code draw()}. * Aufruf von {@code draw()}.
@@ -149,7 +151,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* Erstellt eine neue Zeichenmaschine mit dem angegebene Titel und * Erstellt eine neue Zeichenmaschine mit dem angegebene Titel und
* Standardwerten für die Größe. * Standardwerten für die Größe.
* <p> * <p>
* Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr Details. * Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr
* Details.
* *
* @param title Der Titel, der oben im Fenster steht. * @param title Der Titel, der oben im Fenster steht.
*/ */
@@ -161,7 +164,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* Erstellt eine neue Zeichenmaschine mit dem angegebene Titel und * Erstellt eine neue Zeichenmaschine mit dem angegebene Titel und
* Standardwerten für die Größe. * Standardwerten für die Größe.
* <p> * <p>
* Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr Details. * Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr
* Details.
* *
* @param title Der Titel, der oben im Fenster steht. * @param title Der Titel, der oben im Fenster steht.
* @param run_once {@code true} beendet die Zeichenmaschine nach einem * @param run_once {@code true} beendet die Zeichenmaschine nach einem
@@ -175,7 +179,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* Erstellt eine neue zeichenmaschine mit einer Leinwand der angegebenen * Erstellt eine neue zeichenmaschine mit einer Leinwand der angegebenen
* Größe und dem angegebenen Titel. * Größe und dem angegebenen Titel.
* <p> * <p>
* Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr Details. * Siehe {@link #Zeichenmaschine(int, int, String, boolean)} für mehr
* Details.
* *
* @param width Breite der {@link Zeichenleinwand Zeichenleinwand}. * @param width Breite der {@link Zeichenleinwand Zeichenleinwand}.
* @param height Höhe der {@link Zeichenleinwand Zeichenleinwand}. * @param height Höhe der {@link Zeichenleinwand Zeichenleinwand}.
@@ -192,15 +197,15 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* Die Zeichenmaschine öffnet automatisch ein Fenster mit einer * Die Zeichenmaschine öffnet automatisch ein Fenster mit einer
* {@link Zeichenleinwand}, die {@code width} Pixel breit und {@code height} * {@link Zeichenleinwand}, die {@code width} Pixel breit und {@code height}
* Pixel hoch ist. Die Leinwand hat immer eine Mindestgröße von 100x100 * Pixel hoch ist. Die Leinwand hat immer eine Mindestgröße von 100x100
* Pixeln und kann nicht größer als der aktuelle Bildschirm werden. * Pixeln und kann nicht größer als der aktuelle Bildschirm werden. Das
* Das Fenster bekommt den angegebenen Titel. * Fenster bekommt den angegebenen Titel.
* <p> * <p>
* Falls {@code run_once} gleich {@code false} ist, werden * Falls {@code run_once} gleich {@code false} ist, werden
* {@link #update(double)} und {@link #draw()} entsprechend der * {@link #update(double)} und {@link #draw()} entsprechend der
* {@link #framesPerSecond} kontinuierlich aufgerufen. * {@link #framesPerSecond} kontinuierlich aufgerufen. Falls das Programm
* Falls das Programm als Unterklasse der Zeichenmaschine verfasst wird, * als Unterklasse der Zeichenmaschine verfasst wird, dann kann auch,
* dann kann auch, {@code update(double)} überschrieben werden, damit die * {@code update(double)} überschrieben werden, damit die Maschine nicht
* Maschine nicht automatisch beendet. * automatisch beendet.
* *
* @param width Breite der {@link Zeichenleinwand Zeichenleinwand}. * @param width Breite der {@link Zeichenleinwand Zeichenleinwand}.
* @param height Höhe der {@link Zeichenleinwand Zeichenleinwand}. * @param height Höhe der {@link Zeichenleinwand Zeichenleinwand}.
@@ -380,7 +385,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
} }
/** /**
* Gibt den aktuellen {@link Options.AppState Zustand} der Zeichenmaschine zurück. * Gibt den aktuellen {@link Options.AppState Zustand} der Zeichenmaschine
* zurück.
* *
* @return Der Zustand der Zeichenmaschine. * @return Der Zustand der Zeichenmaschine.
*/ */
@@ -425,8 +431,9 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* Pausiert die Ausführung von {@link #update(double)} und {@link #draw()} * Pausiert die Ausführung von {@link #update(double)} und {@link #draw()}
* nach dem nächsten vollständigen Frame. * nach dem nächsten vollständigen Frame.
* <p> * <p>
* Die Zeichenmaschine wechselt in den Zustand {@link Options.AppState#PAUSED}, * Die Zeichenmaschine wechselt in den Zustand
* sobald der aktuelle Frame beendet wurde. * {@link Options.AppState#PAUSED}, sobald der aktuelle Frame beendet
* wurde.
*/ */
public final void pause() { public final void pause() {
pause_pending = true; pause_pending = true;
@@ -445,6 +452,7 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
/** /**
* Prüft, ob die Zeichenmaschine gerade pausiert ist. * Prüft, ob die Zeichenmaschine gerade pausiert ist.
*
* @return * @return
*/ */
public final boolean isPaused() { public final boolean isPaused() {
@@ -455,10 +463,10 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* Stoppt die Zeichenmaschine. * Stoppt die Zeichenmaschine.
* <p> * <p>
* Nachdem der aktuelle Frame gezeichnet wurde wechselt die Zeichenmaschine * Nachdem der aktuelle Frame gezeichnet wurde wechselt die Zeichenmaschine
* in den Zustand {@link Options.AppState#STOPPED} und ruft {@link #teardown()} * in den Zustand {@link Options.AppState#STOPPED} und ruft
* auf. Nachdem {@code teardown()} ausgeführt wurde wechselt der Zustand zu * {@link #teardown()} auf. Nachdem {@code teardown()} ausgeführt wurde
* {@link Options.AppState#TERMINATED}. Das Zeichenfenster bleibt weiter * wechselt der Zustand zu {@link Options.AppState#TERMINATED}. Das
* geöffnet. * Zeichenfenster bleibt weiter geöffnet.
*/ */
public final void stop() { public final void stop() {
running = false; running = false;
@@ -489,8 +497,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
} }
/** /**
* Beendet das Programm. Falls {@code exit} gleich {@code true} ist, * Beendet das Programm. Falls {@code exit} gleich {@code true} ist, wird
* wird die komplette VM beendet. * die komplette VM beendet.
* *
* @param exit Ob die VM beendet werden soll. * @param exit Ob die VM beendet werden soll.
* @see System#exit(int) * @see System#exit(int)
@@ -505,6 +513,27 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
} }
} }
/**
* Interne Methode um die Größe der Zeichenfläche zu ändern.
* <p>
* Die Methode berücksichtigt nicht den Zustand des Fensters (z.B.
* Vollbildmodus) und geht davon aus, dass die aufrufende Methode
* sichergestellt hat, dass eine Änderung der Größe der Zeichenfläche
* zulässig und sinnvoll ist.
*
* @param width Neue Breite der Zeichenleinwand.
* @param height Neue Höhe der Zeichenleinwand.
* @see #setSize(int, int)
* @see #setFullscreen(boolean)
*/
private void changeSize( int width, int height ) {
if( canvas != null ) {
canvas.setSize(width, height);
}
this.width = Math.min(Math.max(width, 100), screenWidth);
this.height = Math.min(Math.max(height, 100), screenHeight);
}
/** /**
* Ändert die Größe der {@link Zeichenleinwand}. * Ändert die Größe der {@link Zeichenleinwand}.
* *
@@ -518,11 +547,7 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
initialHeight = Math.min(Math.max(height, 100), screenHeight); initialHeight = Math.min(Math.max(height, 100), screenHeight);
setFullscreen(false); setFullscreen(false);
} else { } else {
if( canvas != null ) { changeSize(width, height);
canvas.setSize(width, height);
}
this.width = Math.min(Math.max(width, 100), screenWidth);
this.height = Math.min(Math.max(height, 100), screenHeight);
//frame.setSize(width, height); //frame.setSize(width, height);
frame.pack(); frame.pack();
@@ -566,8 +591,7 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
} }
/** /**
* Fügt der {@link Zeichenleinwand} eine weitere {@link Layer Ebene} * Fügt der {@link Zeichenleinwand} eine weitere {@link Layer Ebene} hinzu.
* hinzu.
* *
* @param layer Die neue Ebene. * @param layer Die neue Ebene.
*/ */
@@ -614,9 +638,9 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
} }
/** /**
* Gibt die {@link ColorLayer Ebene} mit der Hintergrundfarbe zurück. Gibt es * Gibt die {@link ColorLayer Ebene} mit der Hintergrundfarbe zurück. Gibt
* keine solche Ebene, so wird eine erstellt und der {@link Zeichenleinwand} * es keine solche Ebene, so wird eine erstellt und der
* hinzugefügt. * {@link Zeichenleinwand} hinzugefügt.
* <p> * <p>
* In der Regel sollte dies dieselbe Ebene sein wie {@link #background}. * In der Regel sollte dies dieselbe Ebene sein wie {@link #background}.
* *
@@ -632,8 +656,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
} }
/** /**
* Gibt die Standard-{@link DrawingLayer Zeichenebene} zurück. Gibt es * Gibt die Standard-{@link DrawingLayer Zeichenebene} zurück. Gibt es keine
* keine solche Ebene, so wird eine erstellt und der {@link Zeichenleinwand} * solche Ebene, so wird eine erstellt und der {@link Zeichenleinwand}
* hinzugefügt. * hinzugefügt.
* <p> * <p>
* In der Regel sollte dies dieselbe Ebene sein wie {@link #drawing}. * In der Regel sollte dies dieselbe Ebene sein wie {@link #drawing}.
@@ -650,8 +674,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
} }
/** /**
* Gibt die Standard-{@link ShapesLayer Formenebene} zurück. Gibt es * Gibt die Standard-{@link ShapesLayer Formenebene} zurück. Gibt es keine
* keine solche Ebene, so wird eine erstellt und der {@link Zeichenleinwand} * solche Ebene, so wird eine erstellt und der {@link Zeichenleinwand}
* hinzugefügt. * hinzugefügt.
* <p> * <p>
* In der Regel sollte dies dieselbe Ebene sein wie {@link #shapes}. * In der Regel sollte dies dieselbe Ebene sein wie {@link #shapes}.
@@ -727,9 +751,9 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
/** /**
* Erstellt eine Momentanaufnahme des aktuellen Inhalts der * Erstellt eine Momentanaufnahme des aktuellen Inhalts der
* {@link Zeichenleinwand} und erstellt daraus eine {@link ImageLayer Bildebene}. * {@link Zeichenleinwand} und erstellt daraus eine
* Die Ebene wird automatisch der {@link Zeichenleinwand} vor dem * {@link ImageLayer Bildebene}. Die Ebene wird automatisch der
* {@link #background} hinzugefügt. * {@link Zeichenleinwand} vor dem {@link #background} hinzugefügt.
* *
* @return Die neue Bildebene. * @return Die neue Bildebene.
*/ */
@@ -815,8 +839,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
} }
/** /**
* Zeigt den Mauszeiger wieder an, falls er zuvor {@link #hideCursor() versteckt} * Zeigt den Mauszeiger wieder an, falls er zuvor
* wurde. * {@link #hideCursor() versteckt} wurde.
* <p> * <p>
* Nach dem Aufruf gilt {@code cursorVisible == true}. * Nach dem Aufruf gilt {@code cursorVisible == true}.
* <p> * <p>
@@ -855,6 +879,7 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* <pre> * <pre>
* setCursor(Cursor.HAND_CURSOR); * setCursor(Cursor.HAND_CURSOR);
* </pre> * </pre>
*
* @param pPredefinedCursor Eine der Cursor-Konstanten. * @param pPredefinedCursor Eine der Cursor-Konstanten.
* @see Cursor * @see Cursor
*/ */
@@ -863,13 +888,14 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
} }
/** /**
* Setzt den Mauszeiger auf das übergebenen Cursor-Objekt. * Setzt den Mauszeiger auf das übergebenen Cursor-Objekt. Wenn
* Wenn {@code pCursor} {@code null} ist, wird der Mauszeiger unsichtbar * {@code pCursor} {@code null} ist, wird der Mauszeiger unsichtbar gemacht
* gemacht (dies ist dasselbe wie der Aufruf von {@link #hideCursor()}). * (dies ist dasselbe wie der Aufruf von {@link #hideCursor()}).
*
* @param pCursor Ein Cursor-Objekt oder {@code null}. * @param pCursor Ein Cursor-Objekt oder {@code null}.
* <p> * <p>
* Nach Aufruf der Methode kann über {@link #cursorVisible} abgefragt werden, * Nach Aufruf der Methode kann über {@link #cursorVisible} abgefragt
* ob der Cursor zurzeit sichtbar ist oder nicht. * werden, ob der Cursor zurzeit sichtbar ist oder nicht.
*/ */
public final void setCursor( Cursor pCursor ) { public final void setCursor( Cursor pCursor ) {
if( pCursor == null && cursorVisible ) { if( pCursor == null && cursorVisible ) {
@@ -896,7 +922,8 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
*/ */
/** /**
* Die Settings werden einmal beim Erstellten der Zeichenmaschine aufgerufen. * Die Settings werden einmal beim Erstellten der Zeichenmaschine
* aufgerufen.
* <p> * <p>
* {@code settings()} wird nur selten benötigt, wenn das Zeichenfenster * {@code settings()} wird nur selten benötigt, wenn das Zeichenfenster
*/ */
@@ -921,9 +948,9 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
* Aktualisierungen abhängig von der echten Verzögerung zwischen zwei Frames * Aktualisierungen abhängig von der echten Verzögerung zwischen zwei Frames
* zu berechnen. * zu berechnen.
* <p> * <p>
* {@code delta} wird in Sekunden angegeben. Um eine Form zum Beispiel * {@code delta} wird in Sekunden angegeben. Um eine Form zum Beispiel um
* um {@code 50} Pixel pro Sekunde in {@code x}-Richtung zu bewegen, * {@code 50} Pixel pro Sekunde in {@code x}-Richtung zu bewegen, kann so
* kann so vorgegangen werden: * vorgegangen werden:
* <pre> * <pre>
* shape.move(50*delta, 0.0); * shape.move(50*delta, 0.0);
* </pre> * </pre>
@@ -937,23 +964,24 @@ public class Zeichenmaschine extends Constants implements MouseInputListener, Ke
/** /**
* {@code draw()} wird einmal pro Frame aufgerufen. Bei einer * {@code draw()} wird einmal pro Frame aufgerufen. Bei einer
* {@link #getFramesPerSecond() Framerate} von 60 also in etwa 60-Mal * {@link #getFramesPerSecond() Framerate} von 60 also in etwa 60-Mal pro
* pro Sekunde. In der {@code draw}-Methode wird der Inhalt der Ebenen * Sekunde. In der {@code draw}-Methode wird der Inhalt der Ebenen
* manipuliert und deren Inhalte gezeichnet. Am Ende des Frames werden alle * manipuliert und deren Inhalte gezeichnet. Am Ende des Frames werden alle
* Ebenen auf die {@link Zeichenleinwand} übertragen. * Ebenen auf die {@link Zeichenleinwand} übertragen.
* <p> * <p>
* {@code draw()} stellt die wichtigste Methode für eine Zeichenmaschine dar, * {@code draw()} stellt die wichtigste Methode für eine Zeichenmaschine
* da hier die Zeichnung des Programms erstellt wird. * dar, da hier die Zeichnung des Programms erstellt wird.
*/ */
public void draw() { public void draw() {
running = !stop_after_update; running = !stop_after_update;
} }
/** /**
* {@code teardown()} wird aufgerufen, sobald die Schleife des Hauptprogramms * {@code teardown()} wird aufgerufen, sobald die Schleife des
* beendet wurde. Dies passiert entweder nach dem ersten Durchlauf (wenn keine * Hauptprogramms beendet wurde. Dies passiert entweder nach dem ersten
* eigene {@link #update(double)} erstellt wurde), nach dem Aufruf von * Durchlauf (wenn keine eigene {@link #update(double)} erstellt wurde),
* {@link #stop()} oder nachdem das {@link Zeichenfenster} geschlossen wurde. * nach dem Aufruf von {@link #stop()} oder nachdem das
* {@link Zeichenfenster} geschlossen wurde.
* <p> * <p>
* In {@code teardown()} kann zum Beispiel der Abschlussbildschirm eines * In {@code teardown()} kann zum Beispiel der Abschlussbildschirm eines
* Spiels oder der Abspann einer Animation angezeigt werden, oder mit * Spiels oder der Abspann einer Animation angezeigt werden, oder mit