public abstract class Raum extends java.lang.Object implements java.io.Serializable, java.lang.Comparable<Raum>
Raum bezeichnet alles, was sich auf der Zeichenebene befindet.
Dies ist die absolute Superklasse aller grafischen Objekte. Umgekehrt kann somit jedes grafische Objekt die folgenden Methoden nutzen.
Modifier and Type | Field and Description |
---|---|
static java.awt.Color[] |
farbzyklus
Ein einfacher Farbzyklus, der fuer die Leucht-Animationen genommen wird
|
protected Punkt |
position
Die absolute Position des Raum-Objekts.
|
protected static boolean |
roh
Ob die Kollisionstests Roh oder fein ablaufen sollen.
|
Constructor and Description |
---|
Raum()
Der eine und einziege Konstruktor fuer Objekte der Klasse Raum.
|
Modifier and Type | Method and Description |
---|---|
void |
afterRender(java.awt.Graphics2D g)
Dreht die Zeichenfläche wieder zurück in den Ausgangszustand.
|
void |
aktivMachen()
Macht dieses Objekt zu einem Aktiv-Objekt.
|
Collider |
aktuellerCollider()
Gibt den aktuellen Collider dieses
Raum -Objekts zurück. |
void |
beeinflussbarSetzen(boolean beeinflussbar)
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenSetzt, ob dieses
Raum -Objekt beeinflussbar sein soll für Impulse von anderen Objekten, die mit diesem Kollidieren. |
void |
beforeRender(java.awt.Graphics2D g)
Dreht die Zeichenfläche um den Mittelpunkt des Raumes um die gegebenen Grad, bevor mit dem Zeichenn begonnen wird.
|
boolean |
beinhaltet(Punkt p)
Prueft, ob ein bestimmter Punkt innerhalb des Raum-Objekts liegt.
|
void |
bewegen(int dX,
int dY)
Bewegt dieses
Raum -Objekt. |
boolean |
bewegen(Vektor v)
Bewegt dieses
Raum -Objekt. |
void |
boundsUebernehmen(Raum boundHilfe)
Übernimmt für die Collision Detection die Bounds eines anderen
Raum -Objektes. |
void |
colliderSetzen(Collider collider)
Setzt einen neuen Collider für dieses
Raum -Objekt. |
int |
compareTo(Raum r)
Hilfsmethode für die Sortierung der Räume nach dem Z-Index.
|
abstract BoundingRechteck |
dimension()
Methode zum Beschreiben der rechteckigen Flaeche, die dieses Objekt einnimmt.
|
void |
drehenAbsolut(double grad)
Dreht ein Objekt auf die angegebene Gradzahl um den Mittelpunkt des Raumes.
|
void |
drehenRelativ(double grad)
Dreht ein Objekt um die angegebene Gradzahl um den Mittelpunkt des Raumes.
|
void |
einfluesseZuruecksetzen()
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenSetzt alle Einflüsse auf dieses
Raum -Objekt zurück. |
abstract Collider |
erzeugeCollider()
Erzeugt einen neuen Collider für dieses Objekt.
|
protected Collider |
erzeugeLazyCollider()
Erzeugt einen Collider auf Lazy Art: Es wird das durch die
dimension() -Methode berechnete BoundingRechteck benutzt, um einen simplen Box-Collider zu erstellen. |
void |
fallReagierbarAnmelden(FallReagierbar f,
int kritischeTiefe)
Meldet einen
FallReagierbar -Listener an. |
BoundingRechteck[] |
flaechen()
Berechnet exakter alle Rechteckigen Flaechen, auf denen dieses Objekt liegt.
|
void |
geschwindigkeitHinzunehmen(Vektor geschwindigkeit)
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenSetzt hart (also ohne Rücksicht auf mögliche Umstände) die Geschwindigkeit dieses
Raum -Objektes. |
void |
geschwindigkeitSetzen(Vektor geschwindigkeit)
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenSetzt die Geschwindigkeit, die dieses
Raum -Objekt haben soll. |
Vektor |
getForce()
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenGibt aus die Kraft aus, die auf dieses
Raum -Objekt dauerhaft wirkt. |
float |
getMasse()
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenGibt aus die Masse dieses
Raum -Objektes aus. |
double |
gibDrehung()
Gibt die aktuelle Drehung des Raumes in Grad zurück.
|
static java.awt.Color |
halbesAlpha(java.awt.Color c)
Erstellt eine Halbdurchsichtige Farbe mit den selben RGB-Werten, wie die eingegebene.
|
static void |
heavyComputingSetzen(boolean heavy)
Setzt, ob saemtliche Kollisionstests in der Engine Alpha grob oder fein sein sollen.
|
int |
hoehenUnterschied(Raum m)
Berechnet den Höhenunterschied zwischen dem Fuß des höheren und dem Kopf des tieferen Raum-Objekts.
|
void |
impulsHinzunehmen(Vektor impuls)
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenWirkt einen Impuls auf das
Raum -Objekt aus. |
boolean |
inFlaeche(BoundingRechteck r)
Prüft, ob dieses Raum-Objekt in ener bestimmten festen Fläche ist.
|
boolean |
istBeeinflussbar()
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenGibt aus, ob dieses
Raum -Objekt beeinflussbar, also durch Impulse beweglich ist. |
void |
kraftAnwenden(Vektor kraft,
float t_kraftuebertrag)
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenSetzt einen neuen Impuls auf dieses
Raum -Objekt, indem eine bestimmte Kraft für eine bestimmte Zeit auf dieses Objekt wirkt. |
void |
kraftSetzen(Vektor kraft)
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenSetzt die Kraft, die auf dieses
Raum -Objekt dauerhaft wirken soll. |
void |
kritischeTiefeSetzen(int tiefe)
Setzt die kritische Tiefe neu.
|
protected void |
leuchterAbmelden(Leuchtend l)
Meldet ein Leuchtend-Objekt am vorgesehenen LeuchtMacher-Objekt ab.
|
protected void |
leuchterAnmelden(Leuchtend l)
Meldet ein Leuchtend-Objekt an dem vorgesehenen LeuchtErsteller Objekt an.
|
void |
loeschen()
Diese Methode loescht alle eventuell vorhandenen Referenzen innerhalb der Engine auf dieses Objekt, damit es problemlos geloescht werden kann.
|
float |
luftwiderstandskoeffizient()
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenGibt den Luftwiderstandskoeffizienten dieses
Raum-Objektes aus. |
void |
luftwiderstandskoeffizientSetzen(float luftwiderstandskoeffizient)
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenSetzt den Luftwiderstandskoeffizienten für dieses
Raum -Objekt. |
void |
masseSetzen(float masse)
Physik-Methode - funktioniert nur bei Newton’schen Raum-ObjektenSetzt die Masse für dieses
Raum -Objekt. |
Punkt |
mittelPunkt()
Methode zum schnellen Herausfinden des Mittelpunktes des Raum-Objektes.
|
void |
mittelpunktSetzen(int x,
int y)
Verschiebt die Raum-Figur so, dass ihr Mittelpunkt die eingegebenen Koordinaten hat.
|
void |
mittelpunktSetzen(Punkt p)
Verschiebt die Raum-Figur so, dass ihr Mittelpunkt die eingegebenen Koordinaten hat.
|
void |
neutralMachen()
Macht dieses
Raum -Objekt fuer die Physik zu einem Neutralen Objekt, also einem Objekt das per se nicht an der Physik teilnimmt. |
void |
newtonschMachen()
TODO
|
void |
passivMachen()
Macht dieses Objekt zu einem Passiv-Objekt.
|
Punkt |
position()
Methode zum schnellen Herausfinden der Position des Raum-Objektes.
|
void |
positionSetzen(float x,
float y)
Setzt die Position des Objektes gänzlich neu auf der Zeichenebene.
|
void |
positionSetzen(Punkt p)
Setzt die Position des Objektes gänzlich neu auf der Zeichenebene.
|
int |
positionX()
Einfache Methode, die die X-Koordinate der linken oberen Ecke des das
Raum -Objekt exakt umrandenden BoundingRechteck ’s auf der Zeichenebene zurueckgibt. |
int |
positionY()
Einfache Methode, die die Y-Koordinate der linken oberen Ecke des das
Raum -Objekt exakt umrandenden BoundingRechteck ’s auf der Zeichenebene zurueckgibt. |
protected static boolean |
problem(int z1,
int z2)
Interne Testmethode, die ein mathematisch simples Konzept hat.
|
boolean |
schneidet(Raum r)
Test, ob ein anderes Raum-Objekt von diesem geschnitten wird.
|
void |
schwerkraftAktivSetzen(boolean aktiv)
Setzt, ob dieses
Raum -Objekt von Schwerkraft beeinflusst wird. |
void |
schwerkraftSetzen(int schwerkraft)
Setzt die Schwerkraft fuer dieses spezielle Objekt.
|
void |
setzeMeterProPixel(float mpp)
Setzt die Meter pro Pixel für die Zeichenebene.
|
boolean |
sichtbar()
Gibt an, ob das Raum-Objekt sichtbar ist.
|
void |
sichtbarSetzen(boolean sichtbar)
Setzt die Sichtbarkeit des Objektes.
|
boolean |
sprung(int kraft)
Laesst das
Raum -Objekt einen Sprung von variabler Kraft machen. |
void |
stehReagierbarAnmelden(StehReagierbar s)
Diese Methode meldet einen
StehReagierbar -Listener neu an. |
boolean |
steht()
Prueft, ob dieses Objekt als Aktiv-Objekt steht.
|
boolean |
stehtAuf(Raum m)
Berechnet, ob dieses Raum-Objekt exakt ueber einem zweiten steht.
|
void |
verschieben(int dX,
int dY)
Verschiebt das Objekt.
|
void |
verschieben(Vektor v)
Verschiebt das Objekt ohne Bedingungen auf der Zeichenebene.
|
abstract void |
zeichnen(java.awt.Graphics2D g,
BoundingRechteck r)
Zeichnet das Objekt.
|
void |
zeichnenBasic(java.awt.Graphics2D g,
BoundingRechteck r)
Die Basiszeichenmethode.
|
Punkt |
zentrum()
Berechnet das Zentrum des Raum-Objekts als Punkt auf der Zeichenebene.
|
void |
zIndex(int z)
Setzt den Z-Index dieses Raumes.
|
static java.awt.Color |
zuFarbeKonvertieren(java.lang.String t)
Diese Methode ordnet einem String ein Color-Objekt zu.
|
protected static boolean roh
Ob die Kollisionstests Roh oder fein ablaufen sollen.
protected Punkt position
Die absolute Position des Raum-Objekts. Die Interpretation dieses Parameters hängt von den sich ableitenden Klassen ab. Er kann komplett irrelevant sein (Knoten), oder - im Regelfall - die linke obere Ecke des Objektes bezeichnen. Default
public static final java.awt.Color[] farbzyklus
Ein einfacher Farbzyklus, der fuer die Leucht-Animationen genommen wird
public Raum()
Der eine und einziege Konstruktor fuer Objekte der Klasse Raum.
public void zIndex(int z)
Setzt den Z-Index dieses Raumes. Je größer, desto weiter vorne wird ein Raum gezeichnet. Diese Methode muss ausgeführt werden, bevor der Raum zu einem Knoten hinzugefügt wird.
z
- zu setzender Indexpublic static void heavyComputingSetzen(boolean heavy)
Setzt, ob saemtliche Kollisionstests in der Engine Alpha grob oder fein sein sollen.
heavy
- Ist dieser Wert true
, werden intern Kollisionstests genauer, aber rechenintensiver. Ist er false
, werden diese Kollisionstests schneller, aber ungenauer.Game.rechenintensiveArbeitSetzen(boolean)
public void neutralMachen()
Macht dieses Raum
-Objekt fuer die Physik zu einem Neutralen Objekt, also einem Objekt das per se nicht an der Physik teilnimmt.
public void passivMachen()
Macht dieses Objekt zu einem Passiv-Objekt.
Ab dem Aufruf dieser Methode verhaelt es sich als Boden-/Wand- bzw. Deckenelement und haelt Aktiv-Objekte auf.
public void aktivMachen()
Macht dieses Objekt zu einem Aktiv-Objekt.
Ab dem Aufruf dieser Methode laesst es sich von Passiv-Objekten aufhalten und wird - solange dies nicht ueber den Methodenaufruf schwerkraftAktivSetzen(false)
deaktiviert wird - von einer kuenstlichen Schwerkraft angezogen.
schwerkraftAktivSetzen(boolean)
public void newtonschMachen()
TODO
public boolean sprung(int kraft)
Laesst das Raum
-Objekt einen Sprung von variabler Kraft machen. Dies funktioniert jedoch nur dann, wenn das Objekt auch ein Aktiv-Objekt ist. Ansonsten ist wird hier eine Fehlermeldung ausgegeben.
kraft
- Die Kraft dieses Sprunges. Je hoeher dieser Wert, desto hoeher der Sprung.true
, wenn das Raum
-Objekt erfolgreich springen konnte. false
, wenn das Raum
-Objekt nicht springen konnte.Raum
-Objekt kein Aktiv-Objekt mit aktivierter Schwerkraft (Standard) ist oder Raum
-Objekt als Aktiv-Objekt nicht auf einem Passiv-Objekt steht.public void schwerkraftAktivSetzen(boolean aktiv)
Setzt, ob dieses Raum
-Objekt von Schwerkraft beeinflusst wird. Macht nur dann Sinn, wenn das Objekt, an dem diese Methode ausgefuehrt wird, ein Aktiv-Objekt ist.
aktiv
- true
, wenn Schwerkraft aktiv sein soll, sonst false
.aktivMachen()
public void schwerkraftSetzen(int schwerkraft)
Setzt die Schwerkraft fuer dieses spezielle Objekt.
Achtung: Standardwert: 4
Groesserer Wert = langsamer Fallen
Kleinerer Wert = schneller Fallen
Negativer Wert : Moege Gott uns allen gnaedig sein…
schwerkraft
- Der Wert fuer die Schwerkraft der Physik.aktivMachen()
public void fallReagierbarAnmelden(FallReagierbar f, int kritischeTiefe)
Meldet einen FallReagierbar
-Listener an.
Dieser wird ab sofort immer dann informiert, wenn dieses Raum
-Objekt unter eine bestimmte Höhe faellt. Diese wird als kritische Tiefe bezeichnet. Der Listener wird ab diesem Zeitpunkt dauerhaft aufgerufen, solange das Objekt unterhalb dieser Toleranzgrenze ist. Deshalb sollte in der implementierten Reaktionsmethode des FallReagierbar
-Interfaces die Höhe so neu gesetzt werden, dass das Raum
-Objekt nicht mehr unterhalb der kritischen Tiefe ist.
ACHTUNG!
Jedes Raum
-Objekt hat HÖCHSTENS einen FallReagierbar
-Listener. Das bedeutet, dass es nicht möglich ist, dass mehrere FallReagierbar
-Listener über ein Objekt informiert werden.
Die kritische Tiefe jedoch lässt sich problemlos immer wieder neu setzen, über die Methode kritischeTiefeSetzen(int tiefe)
.
Diese Methode mach natürlich nur Sinn, wenn sie an einem Aktiv-Objekt ausgeführt wird. Andernfalls gibt es eine Fehlermeldung!
f
- Das anzumeldende FallReagierbar
kritischeTiefe
- Die Tiefe ab der der Listener dauerhaft durch den Aufruf seiner Reaktionsmethode informiert wird, solange das Raum
-Objekt hierunter ist.FallReagierbar
,
kritischeTiefeSetzen(int)
public void kritischeTiefeSetzen(int tiefe)
Setzt die kritische Tiefe neu. Ab dieser Tiefe wird der FallReagierbar
-Listener dieses Raum
-Objektes aufgerufen - dauerhaft so lange, bis das Raum
-Objekt nicht mehr unterhalb dieser Tiefe ist.
tiefe
- Die neue kritische Tiefe. Die Tiefe ab der der Listener dauerhaft durch den Aufruf seiner Reaktionsmethode informiert wird, solange das Raum
-Objekt hierunter ist.FallReagierbar
,
fallReagierbarAnmelden(FallReagierbar, int)
public void stehReagierbarAnmelden(StehReagierbar s)
Diese Methode meldet einen StehReagierbar
-Listener neu an.
Dieser wird nach der Anmeldung immer dann einmalig durch den Aufruf seiner stehReagieren()
-Methode informiert, wenn dieses Raum
-Objekt nach dem Fall/Sprung wieder auf einem Passiv-Objekt zu stehen kommt.
ACHTUNG!
Ein Raum
-Objekt kann hoechstens einen StehReagierbar
-Listener besitzen!
Diese Methode mach natuerlich nur Sinn, wenn sie an einem Aktiv-Objekt ausgefuehrt wird. Andernfalls gibt es eine Fehlermeldung!
s
- Der StehReagierbar
-Listener, der ab sofort bei jedem neuen zum Stehen kommen dieses Raum
-Objekts informiert wird.StehReagierbar
public boolean steht()
Prueft, ob dieses Objekt als Aktiv-Objekt steht.
Diese Methode steht nicht in direktem Zusammenhang mit dem Interface StehReagierbar
, denn durch diese Methode laesst sich zu jedem beliebigen Zeitpunkt erfragen, ob das Raum
-Objekt steht, nicht jedoch - wie durch StehReagierbar
- am genauen Zeitpunkt des zum Stehen kommens hierauf reagieren.
Diese Methode macht natuerlich nur dann sinn, wenn sie an einem Aktiv-Objekt ausgefuehrt wird. Andernfalls gibt es eine Fehlermeldung!
true
, wenn dieses Raum
-Objekt als Aktiv-Objekt auf einem Passiv-Objekt steht. Steht dieses Raum
-Objekt als Aktiv-Objekt nicht auf einem Passiv-Objekt, oder ist dieses Raum
-Objekt kein Aktiv-Objekt, so ist die Rueckgabe false
.public boolean bewegen(Vektor v)
Bewegt dieses Raum
-Objekt. Der Unterschied zum Verschieben ist folgender:
Ist dieses Objekt in der Physik beteiligt, so ist dies eine Bewegung innerhalb der Physik und kein Stumpfes Verschieben.
Ist dieses Objekt fuer die Physik neutral ist dies genauso wie verschieben
.
v
- Die Bewegung beschreibender Vektortrue
, wenn sich dieses Raum
-Objekt ohne Probleme bewegen liess. Konnte es wegen der Physik (Aktiv-Objekt von Passiv-Objekt geblockt) nicht vollstaendig verschoben werden, so wird false
zurueckgegeben.true
, da diese Problemlos verschoben werden können.bewegen(int, int)
public void bewegen(int dX, int dY)
Bewegt dieses Raum
-Objekt. Der Unterschied zum Verschieben ist folgender:
Ist dieses Objekt in der Physik beteiligt, so ist dies eine Bewegung innerhalb der Physik und kein Stumpfes Verschieben.
Ist dieses Objekt fuer die Physik neutral ist dies genauso wie verschieben
.
dX
- Der X-Anteil der Verschiebung (Delta-X)dY
- Der Y-Anteil der Verschiebung (Delta-Y)bewegen(Vektor)
public void setzeMeterProPixel(float mpp)
Setzt die Meter pro Pixel für die Zeichenebene. Dies ist das dynamische Bindeglied zwischen der physikalisch möglichst korrekten Berechnung innerhalb der Engine sowie der freien Wählbarkeit der Zeichenebene.
mpp
- Die Anzahl an Metern, die auf einen Pixel fallen.10(.0f)
=> Auf einen Pixel fallen 10 Meter. => Ein Meter = 0,1 Pixel0.1f
=> Auf einen Pixel fallen 0,1 Meter. => Ein Meter = 10 PixelnewtonschMachen()
public void impulsHinzunehmen(Vektor impuls)
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Wirkt einen Impuls auf das Raum
-Objekt aus. Dieser ändert - abhängig von seiner Richtung, Intensität sowie von der Mass des Raum-Objekts eine Geschwindigkeitsänderung.
impuls
- Der Impuls, der diesem Raum
-Objekt zugeführt werden soll.masseSetzen(float)
,
kraftSetzen(Vektor)
,
setzeMeterProPixel(float)
,
newtonschMachen()
public void geschwindigkeitHinzunehmen(Vektor geschwindigkeit)
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Setzt hart (also ohne Rücksicht auf mögliche Umstände) die Geschwindigkeit dieses Raum
-Objektes. Es bewegt sich ab sofort mit dieser Geschwindigkeit weiter.
geschwindigkeit
- die Geschwindigkeit, die dieses Raum
-Objekt ab sofort annehmen soll. WICHTIG: Die Einheiten für physikalische Größen innerhalb der Engine entsprechen denen aus der klassischen Mechanik. Die Einheit für Geschwindigkeit ist [m / s]masseSetzen(float)
,
kraftSetzen(Vektor)
,
setzeMeterProPixel(float)
,
luftwiderstandskoeffizientSetzen(float)
,
newtonschMachen()
public float luftwiderstandskoeffizient()
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Gibt den Luftwiderstandskoeffizienten dieses Raum-Objektes
aus.
public boolean istBeeinflussbar()
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Gibt aus, ob dieses Raum
-Objekt beeinflussbar, also durch Impulse beweglich ist. Was das heisst, kannst Du in der Setter-Methode nachlesen.
true
, falls dieses Raum
-Objekt beeinflussbar ist, sonst false
.beeinflussbarSetzen(boolean)
,
newtonschMachen()
public float getMasse()
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Gibt aus die Masse dieses Raum
-Objektes aus. Diese ist relevant Impulsrechnungen, z.B. wenn 2 Objekte kollidieren.
Raum
-Objektes in korrekter Einheit. WICHTIG: Die Einheiten für physikalische Größen innerhalb der Engine entsprechen denen aus der klassischen Mechanik. Die Einheit für Masse ist [kg]masseSetzen(float)
,
newtonschMachen()
public Vektor getForce()
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Gibt aus die Kraft aus, die auf dieses Raum
-Objekt dauerhaft wirkt. So lässt sich z.B. eine dynamische Schwerkraft realisieren.
Raum
-Objektes konstant wirkt. WICHTIG: Die Einheiten für physikalische Größen innerhalb der Engine entsprechen denen aus der klassischen Mechanik. Die Einheit für Kraft ist [N] = [kg * (m / s^2)]beeinflussbarSetzen(boolean)
,
newtonschMachen()
public void luftwiderstandskoeffizientSetzen(float luftwiderstandskoeffizient)
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Setzt den Luftwiderstandskoeffizienten für dieses Raum
-Objekt. Je größer dieser Wert ist, desto stärker ist der Luftwiderstand auf das Raum-Objekt
.
Der Luftwiderstand nicht über die vollständige Luftwiderstandsformel (u.a. mit Querschnittsfläche des Körpers) berechnet. Der Luftwiderstand berechnet sich ausschließlich aus der Geschwindigkeit und dieses Luftwiderstandskoeffizienten:
(F_w = luftwiderstandskoeffizient * v^2)
luftwiderstandskoeffizient
- Der Luftwiderstandskoeffizient, der für dieses Raum
-Objekt gelten soll. Ist dieser Wert 0
, so wirkt kein Luftwiderstand auf das Objekt.luftwiderstandskoeffizient()
,
newtonschMachen()
public void beeinflussbarSetzen(boolean beeinflussbar)
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Setzt, ob dieses Raum
-Objekt beeinflussbar sein soll für Impulse von anderen Objekten, die mit diesem Kollidieren. Ist es nicht beeinflussbar, so prallen (beeinflussbare) Objekte einfach an ihm ab. Typische unbeeinflussbare Objekte sind:
Ist ein Raum
-Objekt beeinflussbar, so kann es an anderen Objekten abprallen bzw. von ihnen blockiert werden. Es kann sie nicht verschieben. Typische beeinflussbare Objekte sind:
Diese Eigenschaft kann beliebig oft durchgewechselt werden.
beeinflussbar
- ist dieser Wert true
, so ist dieses Objekt ab sofort beeinflussbar. Sonst ist es ab sofort nicht beeinflussbar.istBeeinflussbar()
,
newtonschMachen()
public void masseSetzen(float masse)
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Setzt die Masse für dieses Raum
-Objekt. Es hat ab sofort diese Masse. Diese hat Auswirkungen auf Impulsrechnung und die Dynamik dieses Objekts..
masse
- die Mass, die dieses Raum
-Objekt ab sofort haben soll. WICHTIG: Die Einheiten für physikalische Größen innerhalb der Engine entsprechen denen aus der klassischen Mechanik. Die Einheit für Masse ist [kg]getMasse()
,
newtonschMachen()
public void kraftSetzen(Vektor kraft)
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Setzt die Kraft, die auf dieses Raum
-Objekt dauerhaft wirken soll. So lässt sich z.B. eine dynamische Schwerkraft realisieren:
Die Schwerkraft, wäre eine Kraft, die dauerhaft nach unten wirkt, also zum Beispiel: Kreis ball = …
[…]
ball.kraftSetzen(new Vektor(0,9.81)); // Setze eine Schwerkraft mit 9,81 kg * m/s^2
kraft
- die Kraft, die auf dieses Raum
-Objekt konstant wirken soll. WICHTIG: Die Einheiten für physikalische Größen innerhalb der Engine entsprechen denen aus der klassischen Mechanik. Die Einheit für Kraft ist [N] = [kg * (m / s^2)]getForce()
,
newtonschMachen()
public void geschwindigkeitSetzen(Vektor geschwindigkeit)
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Setzt die Geschwindigkeit, die dieses Raum
-Objekt haben soll.
geschwindigkeit
- die Geschwindikeit, die auf dieses Raum
-Objekt mit sofortiger Wirkung annehmen soll. WICHTIG: Die Einheiten für physikalische Größen innerhalb der Engine entsprechen denen aus der klassischen Mechanik. Die Einheit für Geschwindigkeit ist [m / s]newtonschMachen()
public void einfluesseZuruecksetzen()
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Setzt alle Einflüsse auf dieses Raum
-Objekt zurück. Dies bedeutet: * die auf dieses Objekt einwirkende, konstante Kraft wird 0. * die Geschwindigkeit dieses Objekts wird 0.
newtonschMachen()
public void kraftAnwenden(Vektor kraft, float t_kraftuebertrag)
Physik-Methode - funktioniert nur bei Newton’schen Raum-Objekten
Setzt einen neuen Impuls auf dieses Raum
-Objekt, indem eine bestimmte Kraft für eine bestimmte Zeit auf dieses Objekt wirkt.
Es gilt für ausreichend kleines t
: p = F * t
Dies ist die grundlegende Berechnung für den Impuls.
kraft
- Eine Kraft, die (modellhaft) auf dieses Raum
-Objekt wirken soll. WICHTIG: Die Einheiten für physikalische Größen innerhalb der Engine entsprechen denen aus der klassischen Mechanik. Die Einheit für Kraft ist [N] = [kg * (m / s^2)]
t_kraftuebertrag
- Die Zeit, über die die obige Kraft auf dieses Raum
-Objekt wirken soll. WICHTIG: Die Einheiten für physikalische Größen innerhalb der Engine entsprechen denen aus der klassischen Mechanik. Die Einheit für Zeit ist [s]newtonschMachen()
public final void sichtbarSetzen(boolean sichtbar)
Setzt die Sichtbarkeit des Objektes.
sichtbar
- Ob das Objekt sichtbar sein soll oder nicht.false
, so wird es nicht im Fenster gezeichnet.Physik
nicht als Kollision. Unsichtbare Raum-Objekte werden somit bei Trefferkollisionen ausgelassen.sichtbar()
,
Physik
public final boolean sichtbar()
Gibt an, ob das Raum-Objekt sichtbar ist.
true
, wenn das Raum-Objekt zur Zeit sichtbar ist.sichtbarSetzen(boolean)
public static java.awt.Color zuFarbeKonvertieren(java.lang.String t)
Diese Methode ordnet einem String ein Color-Objekt zu.
Hierdurch ist in den Klassen außerhalb der Engine keine awt-Klasse nötig.
t
- Der Name der Farbe.public static final java.awt.Color halbesAlpha(java.awt.Color c)
Erstellt eine Halbdurchsichtige Farbe mit den selben RGB-Werten, wie die eingegebene.
Diese Methode wird intern verwendet.
c
- Die Farbe, deren im Alphawert gesenkte Instanz erstellt werden soll.protected final void leuchterAnmelden(Leuchtend l)
Meldet ein Leuchtend-Objekt an dem vorgesehenen LeuchtErsteller Objekt an.
Diese Methode ist dafür vorgesehen, dass sie nur im Konstruktor der dieses Interface implementierenden Instanz aufgerufen wird, und zwar mit dem this
-Pointer, sprich:
:super.leuchterAnmelden(this);
Prinzipiell sollte diese Methode nur innerhalb der Engine aufgerufen werden
l
- Der anzumeldende Leuchterprotected final void leuchterAbmelden(Leuchtend l)
Meldet ein Leuchtend-Objekt am vorgesehenen LeuchtMacher-Objekt ab.
Prinzipiell sollte diese Methode nur innerhalb der Engine aufgerufen werden
l
- Der abzumeldende Leuchterprotected static boolean problem(int z1, int z2)
Interne Testmethode, die ein mathematisch simples Konzept hat.
Es gibt kein Problem, wenn die Zahlen das selbe Vorzeichen haben oder wenn eine der beiden Zahlen gleich 0 ist.
true
, falls diese Zahlenkonstellation ein Problem ist, sonst false
.public final void zeichnenBasic(java.awt.Graphics2D g, BoundingRechteck r)
Die Basiszeichenmethode.
Sie schließt eine Fallabfrage zur Sichtbarkeit ein. Diese Methode wird bei den einzelnen Gliedern eines Knotens aufgerufen.
g
- Das zeichnende Graphics-Objektr
- Das BoundingRechteck, dass die Kameraperspektive Repraesentiert.zeichnen(Graphics2D, BoundingRechteck)
public void positionSetzen(Punkt p)
Setzt die Position des Objektes gänzlich neu auf der Zeichenebene.
Hierbei wird die abstrakte Methode verschieben() und dimension() angewandt, um eine zur vorherigen Position relative Verschiebung zu erreichen, die an die gewünschte Zielposition fährt.
ACHTUNG !!!
Bei den ALLEN Objekten ist die eingegebene Position die links-oben liegende Ecke des die Figur optimal umschreibenden zu den Fensterbegrenzungen parallelen Rechtecks.
Das heißt, dass bei Kreisen zum Beispiel nicht die des Mittelpunktes ist! Hierfür gibt es die Sondermethode mittelpunktSetzen(int x, int y)
.
p
- Der neue ZielpunktpositionSetzen(float, float)
public void positionSetzen(float x, float y)
Setzt die Position des Objektes gänzlich neu auf der Zeichenebene.
Hierbei wird die abstrakte Methode verschieben() und dimension() angewandt, um eine zur vorherigen Position relative Verschiebung zu erreichen, die an die gewünschte Zielposition fährt.
ACHTUNG !!!
Bei den ALLEN Objekten ist die eingegebene Position die links-oben liegende Ecke des die Figur optimal umschreibenden zu den Fensterbegrenzungen parallelen Rechtecks.
Das heißt, dass bei Kreisen zum Beispiel nicht die des Mittelpunktes ist! Hierfür gibt es die Sondermethode mittelpunktSetzen(int x, int y)
.
x
- neue x
-Koordinatey
- neue y
-KoordinatemittelpunktSetzen(int, int)
,
positionSetzen(Punkt)
public void mittelpunktSetzen(int x, int y)
Verschiebt die Raum-Figur so, dass ihr Mittelpunkt die eingegebenen Koordinaten hat.
Diese Methode arbeitet nach dem Mittelpunkt des das Objekt abdeckenden BoundingRechtecks durch den Aufruf der Methode zentrum()
. Daher ist diese Methode in der Anwendung auf ein Knoten-Objekt nicht unbedingt sinnvoll.
x
- Die x
-Koordinate des neuen Mittelpunktes des Objektesy
- Die y
-Koordinate des neuen Mittelpunktes des ObjektesmittelpunktSetzen(Punkt)
,
verschieben(Vektor)
,
positionSetzen(float, float)
,
zentrum()
public void mittelpunktSetzen(Punkt p)
Verschiebt die Raum-Figur so, dass ihr Mittelpunkt die eingegebenen Koordinaten hat.
Diese Methode Arbeitet nach dem Mittelpunkt des das Objekt abdeckenden BoundingRechtecks durch den Aufruf der Methode zentrum()
. Daher ist diese Methode im Anwand auf ein Knoten-Objekt nicht unbedingt sinnvoll.
Macht dasselbe wie mittelPunktSetzen(p.x, p.y)
.
p
- Der neue Mittelpunkt des Raum-ObjektsmittelpunktSetzen(int, int)
,
verschieben(Vektor)
,
positionSetzen(float, float)
,
zentrum()
public Punkt position()
Methode zum schnellen Herausfinden der Position des Raum-Objektes.
Achtung: Diese Methode gibt nur die Position der linken, oberen Ecke aus fuer mehr Informationen ist die Methode dimension()
zu empfehlen, die mehr Information bietet.
Punkt
-Objektesdimension()
public Punkt mittelPunkt()
Methode zum schnellen Herausfinden des Mittelpunktes des Raum-Objektes.
dimension()
,
position()
public int positionX()
Einfache Methode, die die X-Koordinate der linken oberen Ecke des das Raum
-Objekt exakt umrandenden BoundingRechteck
’s auf der Zeichenebene zurueckgibt.
public int positionY()
Einfache Methode, die die Y-Koordinate der linken oberen Ecke des das Raum
-Objekt exakt umrandenden BoundingRechteck
’s auf der Zeichenebene zurueckgibt.
public void verschieben(Vektor v)
Verschiebt das Objekt ohne Bedingungen auf der Zeichenebene. Dies ist die zentrale Methode zum
v
- Der Vektor, der die Verschiebung des Objekts angibt.Vektor
,
verschieben(int, int)
public void verschieben(int dX, int dY)
Verschiebt das Objekt.
Hierbei wird nichts anderes gemacht, als verschieben(new Vektor(dX, dY))
auszufuehren. Insofern ist diese Methode dafuer gut, sich nicht mit der Klasse Vektor auseinandersetzen zu muessen.
dX
- Die Verschiebung in Richtung XdY
- Die Verschiebung in Richtung Yverschieben(Vektor)
public final boolean schneidet(Raum r)
Test, ob ein anderes Raum-Objekt von diesem geschnitten wird.
r
- Das Objekt, das auf Kollision mit diesem getestet werden soll.public abstract void zeichnen(java.awt.Graphics2D g, BoundingRechteck r)
Zeichnet das Objekt.
g
- Das zeichnende Graphics-Objektr
- Das BoundingRechteck, dass die Kameraperspektive Repraesentiert.public final void beforeRender(java.awt.Graphics2D g)
Dreht die Zeichenfläche um den Mittelpunkt des Raumes um die gegebenen Grad, bevor mit dem Zeichenn begonnen wird.
Diese Methode sollte nicht außerhalb der Engine verwendet werden.
public final void afterRender(java.awt.Graphics2D g)
Dreht die Zeichenfläche wieder zurück in den Ausgangszustand. Diese Methode sollte nicht außerhalb der Engine verwendet werden.
public final boolean beinhaltet(Punkt p)
Prueft, ob ein bestimmter Punkt innerhalb des Raum-Objekts liegt.
p
- Der Punkt, der auf Inhalt im Objekt getestet werden soll.public abstract BoundingRechteck dimension()
Methode zum Beschreiben der rechteckigen Flaeche, die dieses Objekt einnimmt.
Diese Methode wird zentral fuer die Trefferkollisionen innerhalb der Engine benutzt und gehoert zu den wichtigsten Methoden der Klasse und der Engine.
public abstract Collider erzeugeCollider()
Erzeugt einen neuen Collider für dieses Objekt. Diese Methode approximiert für das Objekt der jeweils implementierenden Raum
-Klasse einen möglichst “guten” Collider; also einen solchen, der das tatsächliche Objekt möglichst genau umfängt, aber auch möglichst wenig Rechenarbeit beansprucht.
colliderSetzen(Collider)
protected Collider erzeugeLazyCollider()
Erzeugt einen Collider auf Lazy Art: Es wird das durch die dimension()
-Methode berechnete BoundingRechteck
benutzt, um einen simplen Box-Collider zu erstellen.
public final Collider aktuellerCollider()
Gibt den aktuellen Collider dieses Raum
-Objekts zurück.
Raum
-Objekts, der für die Collision Detection verwendet wird.colliderSetzen(Collider)
,
schneidet(Raum)
public void colliderSetzen(Collider collider)
Setzt einen neuen Collider für dieses Raum
-Objekt. Nach Aufruf dieser Methode ist der standardisierte Collider, der intern automatisch gesetzt wird (jedoch meist nicht optimal ist), außer Kraft und nur noch der hier übergebene Collider ist für die Collision Detection relevant.
collider
- Der neue Collider, der für die Schnitt-Überprüfung verwendet wird.schneidet(Raum)
,
boundsUebernehmen(Raum)
public void boundsUebernehmen(Raum boundHilfe)
Übernimmt für die Collision Detection die Bounds eines anderen Raum
-Objektes.
boundHilfe
- Ein weiteres Raum-Objekt, dessen prinzipiellen Bounds übernommen werden sollen.Raum
-Objektes vom Ursprung der Zeichenebene aus entspricht dem Offset des Colliders relativ zu diesem Raum
-Objekt.colliderSetzen(Collider)
public BoundingRechteck[] flaechen()
Berechnet exakter alle Rechteckigen Flaechen, auf denen dieses Objekt liegt.
Diese Methode wird von komplexeren Gebilden, wie geometrischen oder Listen ueberschrieben.
dimension()
als Inhalt.Knoten
public boolean stehtAuf(Raum m)
Berechnet, ob dieses Raum-Objekt exakt ueber einem zweiten steht.
Dies waere fuer die Engine ein Stehen auf diesem.
m
- Das Raum-Objekt, fuer das getestet werden soll, ob dieses auf ihm steht,true
, wenn dieses Objekt auf dem eingegeben steht, sonst false
public Punkt zentrum()
Berechnet das Zentrum des Raum-Objekts als Punkt auf der Zeichenebene.
Das Zentrum wird über die Methode dimension()
berechnet, und zwar über die Methode des resultierenden BoundingRechtecks:
dimension().zentrum()
public int hoehenUnterschied(Raum m)
Berechnet den Höhenunterschied zwischen dem Fuß des höheren und dem Kopf des tieferen Raum-Objekts.
m
- Das Raum-Objekt, dessen Höhenunterschied zu diesem gefunden werden sollpublic void loeschen()
Diese Methode loescht alle eventuell vorhandenen Referenzen innerhalb der Engine auf dieses Objekt, damit es problemlos geloescht werden kann.
Achtung: zwar werden hierdurch alle Referenzen geloescht, die nur innerhalb der Engine liegen (dies betrifft vor allem Animationen etc), jedoch nicht die innerhalb eines Knoten
-Objektes!!!!!!!!!
Das heisst, wenn das Objekt an einem Knoten liegt (was immer der Fall ist, wenn es auch gezeichnet wird (siehe die Wurzel des Fensters)), muss es trotzdem selbst geloescht werden, dies erledigt diese Methode nicht!!.
public boolean inFlaeche(BoundingRechteck r)
Prüft, ob dieses Raum-Objekt in ener bestimmten festen Fläche ist.
r
- Die kritische Fläche, auf deren schneiden mit diesem Raum-Objekt getestet werden soll.true
, wenn dieses Raum-Objekt sich mit dem BoundingRechteck schneidet, sonst false
.public void drehenAbsolut(double grad)
Dreht ein Objekt auf die angegebene Gradzahl um den Mittelpunkt des Raumes.
grad
- Grad, auf die gedreht werden soll.public double gibDrehung()
Gibt die aktuelle Drehung des Raumes in Grad zurück.
public void drehenRelativ(double grad)
Dreht ein Objekt um die angegebene Gradzahl um den Mittelpunkt des Raumes.
grad
- Grad, um die gedreht werden soll.public int compareTo(Raum r)
Hilfsmethode für die Sortierung der Räume nach dem Z-Index. Diese Methode sollte nicht außerhalb der Engine verwendet werden.
compareTo
in interface java.lang.Comparable<Raum>
zIndex
,
zIndex(int)