Variable Methodenwahl

G

Gonzo17

Gast
Servus,

also mir geht's um folgendes. Erstmal die Situation. Ich programmiere an einem Jump'n'Run-Spiel mit und zur Kollisionserkennung habe ich jeweils eine Methode, die überprüft, ob rechts, links, oben oder unten geblockt ist. Die Methoden funktionieren jeweils gut, allerdings muss ich die ja bei der Berechnung der neuen Position mehrmals aufrufen. Einmal bewegt sich eine Figur in einem Intervall nach rechts und oben, einmal nur nach unten. Dazu müsste ich ja theoretisch eine riesige if-else-Kaskade aufbauen, was ich jetzt zum Testen auch erstmal gemacht habe, allerdings stellt sich mir da die Frage: geht das nicht einfacher?

Was mir da so vorschwebt ist eine Möglichkeit, dass man anhang zB eines Enums bestimmt, welche Methoden aufgerufen werden sollen. Das Enum hat dann natürlich so viele Felder wie meine if-else-Abfragen. Ich würde dann zB das passende Feld aus dem Enum in eine Methode weitergeben und die ruft dann alle notwendigen weiteren Methoden auf. Gibt's da ne elegante Lösung? Oder muss ich tatsächlich so hässlichen Code verwenden? (der ist ja nichtmal mehr übersichtlich, man muss ja dauernd überlegen, welches if/else man gerade behandelt)

Gruß, Gonzo
 

Cola_Colin

Top Contributor
Man könnte eine Methode schreiben, die die Richtung in die die Bewegung blockiert ist, zurückgibt oder eben nicht blockiert.
Die Rückgabewerte könnte man z.B. über einen enum lösen.
Intern kann die die 4 anderen aufrufen.
 

Marco13

Top Contributor
So ganz ist nicht klar, an welcher Stelle da die "Häßlichkeit" einsetzt. Man kann sich zwar bei jedem "if" die Frage stellen, ob man es vermeiden könnte (und meistens sollte man sich diese Frage auch stellen), aber manchmal kommt man eben nicht drumrum. Poste vielleicht mal ein bißchen (nicht notwendigerweise "vollständigen", aber doch repräsentativen Code.

@raiL: <korinthenkack> Polymorphismus ? Wikipedia </korinthenkack> :D
 
G

Gonzo17

Gast
Java:
if (isMovingDown) {
	if (isMovingRight) {

	} else if (isMovingLeft) {

	} else {
	
	}
} else if (isMovingUp) {
	if (isMovingRight) {

	} else if (isMovingLeft) {

	} else {

	}
} else {
	if (isMovingRight) {

	} else if (isMovingLeft) {

	} else {
	// nothing to do
	}
}

Edit: Zum Verständis, es wird erst die vertikale, dann die horizontale Bewegung abgefragt. Da eine Figur ja aber auch "schräg" springen kann, muss da eben eine gesonderte Berechnung erfolgen (aber auch unter der Verwendung der vier Methoden zum Abfragen, ob eine Kollision geschieht).

So sieht das ganze if-elseif-else-Gebirge aus. Die boolean Variablen kann ich vorher problemlos ermitteln und dienen mir dazu, die Richtung der Figur zu ermitteln. Und je nachdem, in welche Richtung(en) sich die Figur bewegt, muss eben auch unterschiedlich vorgegangen werden.

Um mir das ganze zu sparen wärs eben am coolsten, wenn ich einfach eine Variable hätte, die die Richtung beschreibt (zB eben in Form eines Enums) und dann (wie auch immer, das ist ja die Frage) Methoden ausgeführt werden, die dazu nötig sind. Wobei ich da eben natürlich dann kein if nutzen will (sonst könnt ichs ja auch so lassen).

Wie ich Polymorphie da nutzen soll, ist mir nicht ganz klar. Könnt ihr mir ein kleines Beispiel geben?
 
Zuletzt bearbeitet von einem Moderator:

Cola_Colin

Top Contributor
Grundlegende Vorgehensweise ist:
Position und Bewegung als Vektoren speichern.

Mögliche Neue Position = Alte Position + Bewegung*vergangene Zeit.
Wenn Mögliche Neue Position nicht blockiert dann setze sie als die neue Position, sonst verwerfe das ganze.

Das kann dazu führen, dass sich sehr schnelle Objekte durch andere Objekte hindurchbewegen können.
Um das zu verhindern kann man zwar noch was machen, das ist aber recht kompliziert und eben nur bei wirklich schnellen Objekten nötig, bei anderen kostet das ganze nur unnötig Rechenleistung.
Kann man also erstmal weglassen. Wichtig ist eben nur, dass die vergangene Zeit zwischen zwei Rechenschritt möglichst klein ist.
Ist sie sehr sehr groß, so wird das Problem schlimmer.
 
G

Gonzo17

Gast
Das klingt generell sehr interessant. Allerdings geht das nicht so einfach, ich weiß nicht ob folgender Sachverhalt aus meiner Beschreibung hervorgegangen ist. Und zwar ist ein Bereich nicht einfach "geblockt", sondern von bestimmten Seiten aus geblockt. D.h. es wäre möglich durch bestimmte Blöcke von unten durchzuspringen, aber obendrauf bleibt man steht. Deswegen brauche ich ja die Information, von welcher Richtung sich die Figur her bewegt.
Ich probiers mal mit den Vektoren aus und gebe dann Rückmeldung.
 

Kubus

Mitglied
Ist ja erstmal nicht schlimm, Vektoren haben ja immer eine Richtung, also kannst du dien Problem damit gut modellieren. Nebenbei würde dir das auch ermöglichen viel mehr Bewegungen zu prüfen statt nur die von dir angegeben, also würde es deinen Code sogar erweiterbar machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
J Wo kommt der Wert der Variable her ? Allgemeine Java-Themen 6
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
H lokale Variable bei Optional verwenden Allgemeine Java-Themen 11
A Variable in if initialisieren Allgemeine Java-Themen 23
S Variable als Objekt Name Allgemeine Java-Themen 3
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
A Variable, welche Exeption wirft als "Global" deklarieren Allgemeine Java-Themen 13
A Scanner Variable Klassenimtern deklarieren Allgemeine Java-Themen 12
L Variablen Variable nicht aktualisiert Allgemeine Java-Themen 3
denny86 NetBeans Ordnernamen rekursiv auslesen und in Variable verarbeiten Allgemeine Java-Themen 38
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
T AWT AWT-EventQueue-0 Null_Pointer_Exception durch Variable Allgemeine Java-Themen 12
M Variable ändern bei jedem Schleifendurchlauf Allgemeine Java-Themen 32
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
S JFrame Variable mitgeben Allgemeine Java-Themen 5
M Variable außerhalb Klasse definierbar? Allgemeine Java-Themen 2
X Bild -> lokale Variable -> DB -> lokale Variable Allgemeine Java-Themen 3
F Aktuelle Variable Allgemeine Java-Themen 2
J String Variable verändert sich plötzlich Allgemeine Java-Themen 8
J private static final String variable Allgemeine Java-Themen 8
A Long variable wird negativ??? Allgemeine Java-Themen 1
reibi Classpath Classpath Variable beim Tomcat Allgemeine Java-Themen 2
M Zeiger auf statische Variable Allgemeine Java-Themen 1
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
F Variable übergeben?! Allgemeine Java-Themen 2
L Variable auch in der function verfügbar machen? Allgemeine Java-Themen 4
M Collections Typ Variable einer generischen Collection ? Allgemeine Java-Themen 4
P Variablen Variable von void im ActionListener verwenden Allgemeine Java-Themen 3
M Parallele Programmierung: volatile Variable nimmt ungewöhnlichen Wert an Allgemeine Java-Themen 3
iB0T Variable Wert ausrauchen Allgemeine Java-Themen 3
T Variablen Variable wird als nicht genutzt angezeigt Allgemeine Java-Themen 8
S Datentypen Eine Variable von String zu Int ändern Allgemeine Java-Themen 5
Hoppelmann "Variable" in String erkennen Allgemeine Java-Themen 2
B Variable class in java.lang.Object Allgemeine Java-Themen 11
O Variablen Originalname einer übergebenen Variable prüfen Allgemeine Java-Themen 9
X Windows-Environment-Variable per jRegistryKey anpassen Allgemeine Java-Themen 6
P Variable in Array stellen Allgemeine Java-Themen 11
M Arraynamen durch Variable festlegen lassen Allgemeine Java-Themen 5
J Anderem Thread Variable mitgeben Allgemeine Java-Themen 2
nrg Auszulagernder Part, der aber variable Methode/Klasse aufruft Allgemeine Java-Themen 7
I %AppData% Variable für einen Prozess setzen Allgemeine Java-Themen 23
G Variablen Variable extern speichern - wie? Allgemeine Java-Themen 9
M Variablen Wie Variable verfügbar machen? Allgemeine Java-Themen 16
A variable aus einer anderen klasse verändern Allgemeine Java-Themen 5
C JFormattedTextField Inhalt einer Variable zuweisen Allgemeine Java-Themen 11
C Variablen Variable einer Klasse in einer anderen Klasse Nutzen Allgemeine Java-Themen 8
B Umgebungsvariable Variable wird nicht übernommen Allgemeine Java-Themen 4
N variable Anzahl von Objektinstanzen zur Laufzeit erstellen Allgemeine Java-Themen 4
C Environment Variable in Pfad -> Datei öffnen Allgemeine Java-Themen 5
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
algorismi int-variable Value Change event Allgemeine Java-Themen 3
E Variable dynamisch ausgeben Allgemeine Java-Themen 5
trash super() mit Variable bestücken Allgemeine Java-Themen 3
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
A Variable Parameterinhalte an einen Query übergeben? Allgemeine Java-Themen 3
B static Variable / Unterklasse Allgemeine Java-Themen 2
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
S Innere Klasse: Zugriff auf äußere Variable Allgemeine Java-Themen 5
Semox Fehler - Zuweisung aus BufferedReader an Variable Allgemeine Java-Themen 3
Daniel_L RegEx - variable Vorkommen ersetzen? Allgemeine Java-Themen 5
P Unicode-Sequenz (u1234) in Variable speichern und ausgeben Allgemeine Java-Themen 6
G auf variable in anderer class zugreifen Allgemeine Java-Themen 2
G Variable global nutzen Allgemeine Java-Themen 4
V Variable vom Typ String zum Typen "Message" konve Allgemeine Java-Themen 2
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
G Speicherverbrauch einer Variable Allgemeine Java-Themen 2
C ArrayList mit Variable im Namen Allgemeine Java-Themen 16
T JNI Referenz auf Variable in Java? Allgemeine Java-Themen 2
G Überprüfen, ob Variable ein Array ist? Allgemeine Java-Themen 5
R Member-Variable erzwingen Allgemeine Java-Themen 17
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
M Zugriff auf Objekt, Name in Variable Allgemeine Java-Themen 3
G Problem mit einer Variable Allgemeine Java-Themen 3
O Future Variable Allgemeine Java-Themen 4
M variable übergeben NICHT KOPIEREN Allgemeine Java-Themen 12
loadbrain KeyEvent mit Variable verknüpfen Allgemeine Java-Themen 4
M Prüfen ob Variable vorhanden / initalisiert ist Allgemeine Java-Themen 4
G Variable wird ignoriert - warum ? Allgemeine Java-Themen 36
L ctrl-z wird nicht in Variable gespeichert Allgemeine Java-Themen 4
G Variable Anzahl JTextfleder Allgemeine Java-Themen 3
R Wenn Variable = wat ist Allgemeine Java-Themen 7
H Zugriff auf statische Variable synchronisieren Allgemeine Java-Themen 4
H globale Variable wird nicht überall erkannt Allgemeine Java-Themen 3
G Zugriff auf Variable in abgeleiteter Klasse Allgemeine Java-Themen 6
R Eine Variable an eine Methode mit Array übergeben Allgemeine Java-Themen 7
E Variable in einer Methode Allgemeine Java-Themen 13
O Environment Variable Setzen Allgemeine Java-Themen 2
G Referenz auf Variable! Allgemeine Java-Themen 3
C Variable aus einer Methode einlesen in einer verarbeiten und Allgemeine Java-Themen 6
G 1.5er String.format() -> variable Feldlaenge? Allgemeine Java-Themen 5
S wie übergebe ich eine Variable aus einer Methode an main() ? Allgemeine Java-Themen 16

Ähnliche Java Themen

Neue Themen


Oben