Methoden Methoden anpassen und fehlende Funktionen hinzufügen

Ich verstehe im Moment noch nicht wie momentan die putTrain Methode genau strukturiert sein muss. Gerade fühlt es sich so an, als habe man einen Kasten aus Legosteinen und keins passt auf den Anderen genau drauf
 
Ich verstehe im Moment noch nicht wie momentan die putTrain Methode genau strukturiert sein muss. Gerade fühlt es sich so an, als habe man einen Kasten aus Legosteinen und keins passt auf den Anderen genau drauf

Also, nochmal:
Java:
    /*
    TODO:
         - Check if there is even a track at the point <point>.
         - If it is a switch at point <point> then check if it's switched to this track.
         - Check if no other train is already on the required track(s) - note the length of the train
         - Check if directionVector fits with direction of track
    */
    public void putTrain(Train train, Point point, Point directionVector) throws LogicException {
        ...
        long trainLength = train.getLength();

    }
In den TODOs stehen ja bereits die Anforderungen.

Schritt 1 besteht offensichtlich darin, das Gleis zu finden, auf dem die Lok steht. Da point sowohl zwischen den Endpunkten als auch auf den Endpunkten eines Gleises stehen kann, muss ggf. anhand der Richtung entschieden werden, welches der zwei möglichen Gleise der Richtung der Lok entspricht (horizontal/vertikal). Außerdem darf es sich gemäß Anforderung 2 nur um ein Gleis handeln, das auch angefahren wird.

Man kann also ein Schienenelement suchen, das diesen beiden Anforderungen genügt. Genau das macht findTrack.

In Anforderung 3 steht "required track(s)", wir brauchen also nicht nur das eine Gleis, auf dem die Lok steht, sondern alle Gleise, auf dem der Zug steht. Das ist Aufgabe von getRequiredTracks(), die unter anderem das Ergebnis von findTrack benötigt.

In Anforderung 4 muss nun für für alle gefunden Tracks geprüft werden, ob bereits ein Lok draufsteht. Anforderung 5 wird sowohl mit findTrack als auch mit getRequiredTracks() realisiert.

Die Methode sieht also im Wesentlichen so aus:
Java:
Track headOfTracks = findTrack(point, directionVector);
if (track == null) { throw ... } // kein passendes Gleis vorhanden

List<Track> requiredTracks = getRequiredTracks(headOfTracks, train, point, directionVector);
assertThatNoTrainIsAssigned(requiredTracks);
assignTrainToTracks(train, requiredTracks);
 
@mihe7 Könntest du die Methode bitte zusammenbauen. Ich sitze nun seit knappen 6 Stunden daran diese Methode zum Laufen zu bekommen und es will einfach nicht funktionieren und so langsam weiß ich echt einfach nicht weiter
 
@mihe7 Stimmt der Teil aus meiner putTrain Methode denn überhaupt?
Java:
        Track headOfTracks = findTrack(point, directionVector).get();
        List<Track> requiredTracks = getRequiredTracks(headOfTracks, point, directionVector, trainLength);
        requiredTracks.forEach(required -> required.setCurrentTrain(train));
        trainsOnTrack.put(directionVector, train);
Insbesondere die letzten beiden Zeilen.
 
Macht deine assignTrainTracks(train, requiredTracks); Methode noch etwas anderes als
Java:
 requiredTracks.forEach(required -> required.setCurrentTrain(train));
trainsOnTrack.put(directionVector, train);
?
 
Das wird sich als schwierig rausstellen, weil ich ein anderes Modell verwendet habe und nun diese Implementierung abgewandelt bei mir versuche zu implementieren. Mir fehlt der komplette Aufbau der Methode das ordentlich zu strukturieren und dabei bin ich mir noch total unsicher, ob ich nicht eine Methode vergessen habe. Orientiert an einer deiner letzten Posts würde die Methode so aussehen:
1.) mit hasConnections() prüfen, ob der Punkt überhaupt auf der Kante liegt, falls nicht Abbruch
2.) Falls der Punkt darauf liegt, dann getPassedPoint() ausführen und damit den Verbindungspunkt des Gleises. Also nur von dem Gleis, auf dem aufgesetzt wird!!!! Täsuche ich mich?????? Dies passiert in Abhängigkeit vom Richtungsvektor herausfinden.
Dann mittels getConnection() den Track bekommen auf dem der Kopf des Zuges liegt //muss man hier schon angeben, in welche Richtung der Zug bewegt wird?
3.) dann mittels getRequiredTracks() die Gleise bekommen auf welchen der Zug liegt und dann jeden Track auf den benötigten Tracks mit dem Setter setTrainOnTrack auf diese Gleise platzieren
4.) Und dann weiß ich nicht mehr weiter... Jetzt muss doch auch der Richtungsvektor ins Spiel kommen oder verraffe ich, dass dieser schon viele früher berücksichtigt werden muss?
 
Oje, müsste in findTracks dann der Richtungsvektor implementiert werden?
Java:
    private Track findTrack(Point point) {
        for (Track track : tracks.values()) {
            if (track.canNavigateTo(point)) {
                return track;
            }
        }
        return null;
    }
 
@mihe7 In der getRequiredTracks Methode stimmt doch hiermit etwas nicht:
Java:
        while (length > 0) {
            ...
            if (!getConnection(passed, currentTrack).isPresent()) {
                throw new ...("no connection track found");
            }
            currentTrack = getConnection(passed, currentTrack).get();
        }

Wenn ich beispielsweise ein Gleis von 1,1 nach 5,1 lege und dann den Zug auf 3,1 mit Länge 1 und Richtungsvektor 1,0 aufgleisen möchte, bekomme ich den Fehler "no connection track found", was aber nicht passieren soll. Wenn ich die If-Abfrage entferne, kann es aber bei get() mit dem Optional zu Fehlern kommen.
 
Mit Hilfe des Debuggers konnte ich jetzt schon einiges verbessern. Es funktioniert sogar teilweise auch. Leider klappt es aber bei folgendem Beispielablauf (der auf jeden Fall richtig ist), noch nicht:
Code:
add track (1,1) -> (5,1)
1
add track (10,10) -> (10,11)
add switch (5,1) -> (8,1),(5,3)
2
add track (10,1) -> (8,1)
3
add switch (10,-3) -> (10,1),(12,-3)
4
add track (10,-3) -> (1,-3)
5
add track (1,-3) -> (1,1)
6
add track (5,3) -> (10,3)
7
add track (10,3) -> (12,3)
8
add switch (12,3) -> (12,-3),(14,3)
9
add track (14,-1) -> (14,3)
10
create engine steam T3 Emma 1 false true
T3-Emma
create coach passenger 1 true true
1
create coach passenger 1 true true
2
add train 1 T3-Emma
steam engine T3-Emma added to train 1
add train 1 W1
passenger coach W1 added to train 1
add train 1 W2
passenger coach W2 added to train 1
set switch 4 position (10,1)
OK
step 1
Expected error-message.
set switch 2 position (8,1)
OK
set switch 9 position (12,-3)
OK
step 1
Line 1 is missing: 'OK'
put train 1 at (1,1) in direction 1,0
Error, directions do not match
Line 1: expected 'OK', but got 'Error, directions do not match'

Ich habe den Beispielablauf fürs Debuggen mal etwas vereinfacht und der Zug hat die Länge eins, wird allerdings auf dasselbe Gleisnetz gesetzt.
Beim Debuggen ist mir folgendes aufgefallen: beim ersten Durchgang (length = 1) funktioniert die Methode einwandfrei. Jetzt wird length dekrementiert und Point passed = currentTrack.getPassedPoint(direction); wird erneut aufgerufen. Allerdings sieht der Ablauf jetzt so aus, wobei offensichtlich die Exception geworfen wird, da sich keine Koordinaten/Komponenten der Punkte/Vektoren gleichen.
Screenshot 2020-02-26 at 20.48.06.png
Mir ist nicht bewusst, wie ich das jetzt lösen soll. Eine If-Abfrage in der getRequiredTracks() Methode (?). Ich habe die Befürchtung, dass ich damit dann eher noch mehr "kaputt mache".
 
Beim Debuggen ist mir folgendes aufgefallen: beim ersten Durchgang (length = 1) funktioniert die Methode einwandfrei. Jetzt wird length dekrementiert und Point passed = currentTrack.getPassedPoint(direction); wird erneut aufgerufen.
Ach, die Länge wird falsch berechnet... Wir berechnen Distanzen zwischen Punkten, d. h. zwischen (1,1) und (1,1) ist ein Abstand von 0 und ziehen daher von der Länge 0 ab. Tatsächlich hat auf dem einen Punkt eine Lok Platz. Gleichzeitig müssen wir aufpassen, dass wir die Punkte bei Anschlussgleisen nicht doppelt zählen.

Mach mal nach der Zeile
Java:
            length -= position.distanceTo(passed);
noch ein
Java:
            if (currentTack == startTack) length--;
rein, dann dürfte es keine zweite Iteration geben.
 
@mihe7 So langsam klappt es bei mir nun auch, jedoch habe ich noch ein Problem mit der getRequiredTracks Methode. Ich tue mich mit dem inhaltlichen Aufbau der Methode gerade schwer.
Java:
    private List<RawTrack> getRequiredTracks(RawTrack startTrack, CartesianPoint startPoint, CartesianPoint direction, int trainLength) {
        RawTrack currentTrack = startTrack;
        CartesianPoint position = startPoint;
        List<RawTrack> requiredTracks = new ArrayList<>();
        int length = trainLength;
        while (length > 0) {
            if (requiredTracks.contains(currentTrack)) {
                //Exception, da dieser schon verwendet wird
            }
            requiredTracks.add(currentTrack);
            CartesianPoint passed = currentTrack.getPassedPoint(direction);
            length = length - position.distanceTo(passed);
            position = passed;
            if (!getConnection(passed, currentTrack).isPresent()) {
                //Exception, weil kein Punkt gefunden
            }
            currentTrack = getConnection(passed, currentTrack).get();
        }
        return requiredTracks;
    }
Ist das der richtige Ansatz? Außerdem verstehe ich nicht, welche Funktionen isPresent() und get() haben und wie diese zu implementieren sind.
 
Und noch was fällt mir gerade auf: die Richtung muss sich ebenfalls ändern, da das Anschlussgleis nicht der Fahrtrichtung der Lok entsprechen muss...

Nach
Java:
currentTrack = getConnection(passed, currentTrack).get();
muss noch die richtige Richtung gesetzt werden:
Java:
direction = currentTrack.getDirectionTo(passed);
wobei currentTrack.getDirectionTo() den Richtungsvektor des Tracks in Richtung passed liefern muss.
 
Ist das der richtige Ansatz?
Ja, das entspricht meiner groben Skizze. Es geht einfach noch um Details wie z. B. die beiden Änderung von eben oder zusätzliche Abfragen wie z. B. evtl. noch erforderliche Längenprüfungen. So kann es z. B. noch notwendig sein,
Java:
            position = passed;
            if (!getConnection(passed, currentTrack).isPresent()) {
                //Exception, weil kein Punkt gefunden
            }
            currentTrack = getConnection(passed, currentTrack).get();
in einen if (length > 0)-Block zu stecken. Da müsst ihr ein wenig testen.
 
Jetzt ist das nächste Problem da und ich verstehe nicht wo der Fehler sein soll:
Java:
    public List<RawTrack> getRequiredTracks(RawTrack startTrack, CartesianPoint startPoint, CartesianPoint direction, int trainLength) {
        RawTrack currentTrack = startTrack;
        CartesianPoint position = startPoint;
        List<RawTrack> requiredTracks = new ArrayList<>();
        int length = trainLength;
        outerloop:while (length > 0) {
            if (requiredTracks.contains(currentTrack)) {
                break outerloop;
                //Exception, da dieser schon verwendet wird
            }
            requiredTracks.add(currentTrack);
            CartesianPoint passed = currentTrack.getPassedPoint(direction);
            length = length - position.distanceTo(passed);
            position = passed;
            Terminal.printLine(edgesReadyForDriving);
            if (getConnection(passed, currentTrack).equals(currentTrack)) { //Wirft NullPointerException???
                break outerloop;

                //Exception, weil kein Punkt gefunden
            }
            currentTrack = getConnection(passed, currentTrack);
        }
        return requiredTracks;
    }
getConnection() wirft eine NullPointerException. Passed und currentTrack sind bei ungleich null. Meine Methode getConnections() ist so aufgebaut wie du es gezeigt hattest @mihe7 mit :
Java:
    private RawTrack getConnection(CartesianPoint point, RawTrack track) {
        for (RawTrack tr : edgesReadyForDriving.get(point)) {
            if (!tr.equals(track)) {
                return tr;
            }
        }
        return null;
    }
Hast du eine Idee woran es liegt, dass hier eine NullPointer geworfen wird? Die Methode muss doch falsch sein, oder nicht
 
getConnection liefert null und Du versuchst, per equals darauf zuzugreifen -> NPE (NullPointerException)

Java:
if (getConnection(passed, currentTrack) == null) {
erscheint mir sinnvoller.
 
Aber getConnection sollte gar nicht zurückgeben wie hier z.B.
Java:
   railManager.addTrack(1, 1, 5, 1); //x1,y1,x2,y2 //track0
   railManager.addTrack(5, 1, 8, 1); //das ist track1
   CartesianPoint point1 = new CartesianPoint(6,1);
   CartesianPoint direction = new CartesianPoint(1,0);
   Terminal.printLine(railManager.getRequiredTracks(railManager.getTrack(1), point1, direction, 3));
Man gibt hier den Punkt (6,1) an, wodrauf der Zugkopf platziert werden soll. Der Zug bewegt sich nach rechts, also in Richtung (1,0). Die Länge des Zugs ist 3, also sollte requiredTracks() track0 und track1 zurückgeben, da der Zug auf beiden liegt.
Das tut es aber nicht.
Sind meine Annahmen falsch oder stimmen die Methoden vorne und hinten nicht, ausgenommen deiner Verbesserung
 
So sollte es sein. Gehen wir die Methode mal durch:

currentTrack = track1 (5,1,8,1), position = point1 (6,1)
while-Schleife: length == 3 > 0, also wird der Schleifenrumpf ausgeführt.
requiredTracks enthält currentTrack nicht -> requiredTracks = {(5,1,8,1)}
passed = (5,1)
length = length - position.distanceTo(passed) = length - 1 = 2
currentTack = getConnection((5,1), currentTrack) = (1,1,5,1)
position = (5,1)

while: length == 2 > 0, also wird der Schleifenrumpf ausgeführt
requiredTracks enthält currentTrack (1,1,5,1) nicht -> requiredTracks = {(5,1,8,1), (1,1,5,1)}
passed = (1,1)
length = length - position.distanceTo(passed) = length - 4 = -2
getConnection(passed, currentTrack) liefert null -> Fehler

Jetzt verstehst Du ggf. auch Kommentar #172.
 
Vielen Dank @mihe7 , verstanden habe ich wie es nun zustande kommt, jedoch bekomme ich als return nicht requiredTracks = {(5,1,8,1), (1,1,5,1)}, sondern nur [t 2 (5,1) -> (8,1) 3], also track1.
In diesem Fall wird track0 quasi nicht beachtet. Liegt es daran, dass der Wert der Liste überschrieben wird oder weißt du woran das liegen könnte?
 
@mihe7 Vielen Dank für die Hilfe so weit. Leider bekomme ich bei Mikas Ablauf eine ganz andere Fehlermeldung:
add track (1,1) -> (5,1) add track (5,1) -> (8,1) put train 1 at (6,1) in direction 1,0 (Zug der Länge 3) Error, train cannot be positioned

Java:
    private List<Track> getRequiredTracks(Track startTrack, Point startPoint, Point direction, long trainLength) {
        Track currentTrack = startTrack;
        Point position = startPoint;
        List<Track> requiredTracks = new ArrayList<>();
        long length = trainLength;
        Point dir = direction;
        while (length > 0) {
            if (currentTrack == null || requiredTracks.contains(currentTrack)) {
                throw new ...("train cannot be positioned");
            }
            requiredTracks.add(currentTrack);
            Point passed = currentTrack.getPassedPoint(dir);
            length -= position.distanceTo(passed);
            if (currentTrack == startTrack) {
                length--;
            }
            position = passed;
            if (getConnection(passed, currentTrack) == null) {
                // Throw exception
            }
            currentTrack = getConnection(passed, currentTrack);
            dir = currentTrack.getDirectionTo(passed);
        }
        // Wird i. d. F. gar nicht erst ausgeführt
        Terminal.printLine(requiredTracks);
        return requiredTracks;
    }

Ich denke mal, dass dies wieder mit einer falschen Iterationsanzahl zu tun hat. Es wird doch currentTrack zu requiredTracks hinzugefügt und in der nächsten Iteration geschaut, ob currentTrack in requiredTracks enthalten ist -> Exception. Was ist hier falsch...? Debuggen hat mich leider nicht wirklich weiter gebracht

Btw: Habe ich die Richtung dir korrekt eingebaut?
 
Es wird doch currentTrack zu requiredTracks hinzugefügt und in der nächsten Iteration geschaut, ob currentTrack in requiredTracks enthalten ist -> Exception. Was ist hier falsch...?
Wenn das erst in der zweiten Iteration passiert, dann musst Du Dir die erste anschauen: dort wird geprüft, ob getConnection() null liefert, falls ja -> Exception.

Demnach kann in der zweiten Iteration currentTrack nicht null sein (außer getConnection liefert bei jedem Aufruf mit gleichen Parametern etwas anderes zurück). Also kann nur requiredTracks.contains(currentTrack) true liefern, was wiederum der Fall ist, wenn in der vorherigen Iteration getConnection() currentTrack liefert.

Sollte nicht passieren:
Java:
    private Track getConnection(Point point, Track track) {
        for (Track tr : edges.get(point)) {
            if (!tr.equals(track)) {
                return tr;
            }
        }
        return null;
    }

Es hilft nur der Debugger. Breakpoint setzen, Variablen genau anschauen, Schritt für Schritt durchgehen. Du weißt ja, was in jedem Schritt erwartet wird. Irgendwo weicht das davon ab.
 
OK, die Fehlermeldung Error, train cannot be positioned lag an:
Java:
Point dir = direction;
...
dir = currentTrack.getDirectionTo(passed);
(siehe Code von oben)

Und noch was fällt mir gerade auf: die Richtung muss sich ebenfalls ändern, da das Anschlussgleis nicht der Fahrtrichtung der Lok entsprechen muss...

Nach
Java:
currentTrack = getConnection(passed, currentTrack).get();
muss noch die richtige Richtung gesetzt werden:
Java:
direction = currentTrack.getDirectionTo(passed);
wobei currentTrack.getDirectionTo() den Richtungsvektor des Tracks in Richtung passed liefern muss.
Den Teil habe ich vorerst entfernt. Ist etwas falsch daran? Eventuell habe ich es falsch umgesetzt.
Nichtsdestotrotz bekomme ich jetzt den Fehler:
Error, no connection track found
Java:
            if (getConnection(passed, currentTrack) == null) {
                throw new ...("no connection track found");
            }

Bei der zweiten Iteration:
Screenshot 2020-02-27 at 12.24.50.png
Leider kann ich das nicht richtig nachvollziehen. Wo liegt hier der Fehler...? Und muss das mit der Richtung wieder rein?
 
Java:
    public Point getDirectionTo(Point vector) {
        return new Point((int) Math.signum(vector.getFirstComponent()), (int) Math.signum(vector.getSecondComponent()));
    }
 
In der Methode requiredTracks(), denn getDirectionTo() normiert den Vektor doch nur?
Ich dachte, toDirection() gibt den normierten Vektor zurück... Dem entsprechend hätte nun Track#getDirectionTo den (normierten) Richtungsvektor des Tracks angegeben, wenn zum angegebenen Endpunkt gefahren wird. Wenn dir Methode getDirectionTo schon existiert, dann muss die hier natürlich umbenannt werden.

EDIT: evtl. wäre getDrivingDirection ein besserer Name.
 
Tut mir leid, ja es gibt den normierten Richtungsvektor zurück. Track#getDirectionTo gibt dann auch einen normierten Richtungsvektor zurück in Richtung Start oder Ende des Gleises, je nachdem wohin der normierte Richtungsvektor zeigt, welcher vom Nutzer eingegeben wird.
Habe ich das richtig verstanden?
 
Ja, wobei eben der übergebene Punkt eine Rolle spielt.

Beispiel: Track (1,1,5,1), also ist die Richtung des Tracks (1,0) - soweit, so gut. Der Zug kann aber das Gleis in beiden Richtungen befahren. Demnach muss getDirectionTo(5,1) gibt (1,0), getDirectionTo(1,1) gibt (-1,0) zurückgeben.
 
Also spielt in diesem Fall der Richtungsvektor in dem der Zug fährt (drivingDirection) in diesem Fall keine Rolle. So würde der Code dann aussehen mit der einzigen Abänderung bei getDirection:
Java:
    private List<RawTrack> getRequiredTracks(RawTrack startTrack, CartesianPoint startPoint, CartesianPoint direction, long trainLength) {
        RawTrack currentTrack = startTrack;
        CartesianPoint position = startPoint;
        List<RawTrack> requiredTracks = new ArrayList<>();
        long length = trainLength;
        CartesianPoint dir = direction;
        while (length > 0) {
            if (currentTrack == null || requiredTracks.contains(currentTrack)) {
             //   throw new ...("train cannot be positioned");
            }
            requiredTracks.add(currentTrack);
            CartesianPoint passed = currentTrack.getPassedPoint(dir);
            length -= position.distanceTo(passed);
            if (currentTrack == startTrack) {
                length--;
            }
            position = passed;
            if (getConnection(passed, currentTrack) == null) {
                // Throw exception
            }
            currentTrack = getConnection(passed, currentTrack);
            // Bestimmt die Richtung in den der Zug gelegt wird mittels dem passedPoint
            dir = currentTrack.getDirectionTo(passed);
            }
            }
 
Also spielt in diesem Fall der Richtungsvektor in dem der Zug fährt (drivingDirection) in diesem Fall keine Rolle
Der ist ja das Problem 🙂 Fahr mal um eine Kurve, dann fährt die Lok z. B. nach rechts, während die Waggons noch nach oben fahren. getDirectionTo liefert sozusagen die Fahrtrichtung der Waggons auf dem Gleis.
 
Aber hier geht es noch um das Legen und das will gar nicht funktionieren. Die drivingDirection lässt sich wie folgt normiert holen:
Java:
    //Normieren vom Fahrtektor
    public CartesianPoint getDrivingDirectionNormed(int x, int y) {
        return new CartesianPoint((int)Math.signum(x), (int)Math.signum(y));
    }
Jetzt fehlt nur noch der Richtungsvektor der Gleise in welchen der Zug als Gesamtheit fährt. Der Aufbau ist doch ähnlich wie von getDrivingDirectionNormed() oder nicht? Ich bekomme es einfach nicht auf die Kette
 
Und mir fällt auf, dass die
Code:
    private Track getConnection(Point point, Track track) {
        for (Track tr : edges.get(point)) {
            if (!tr.equals(track)) {
                return tr;
            }
        }
        return null;
    }
nicht sauber funktioniert. Die Methode gibt das aktuelle Gleis aus und nicht das, welches sich am Anschlusspunkt befindet. Das könnte die Ursache für die NPE u.U. sein
 
Dem entsprechend hätte nun Track#getDirectionTo den (normierten) Richtungsvektor des Tracks angegeben, wenn zum angegebenen Endpunkt gefahren wird
Java:
public Point getDirectionTo(Point passed) {

    if (passed == switchedTo) {


    } else {

    }

}

Wie sähe die Methode dann konkret aus?

currentTrack kann an der Stelle nicht null sein, den check kannst Du Dir sparen.
Warum zeigt mir meine IDE dann fälschlicherweise "Method invocation 'getDrivingDirection' may produce 'NullPointerException'" an?
 
@mihe7 Die putTrain Methode klappt bei mir nun fast komplett. Muss diese nur noch zusammenstellen und die Exceptions werfen. Gott sei Dank.
Nun komme ich zum Fahren und ich muss sagen das dies mir die größten Kopfschmerzen bereitet.
Mein Ansatz ist es den putTrain Befehl für jedes Fahren erneut auszuführen unter der Bestimmung der Punkte wo der Zug aufgegleist wird.
Ist das Mode oder kann das weg?
 
Warum zeigt mir meine IDE dann fälschlicherweise "Method invocation 'getDrivingDirection' may produce 'NullPointerException'" an?
Das ist nicht fälschlicherweise, sondern ein Hinweis der IDE. Wenn Du z. B. null übergibst, bekommst Du eine NPE, wenn die Methode null zurückliefert, bekommst Du wg. equals eine NPE.

Tatsächlich kann das aber aufgrund des Ablaufs der Methode nicht auftreten: currentTrack kann nicht null sein, weil das ein paar Zeilen vorher abgefangen wird.
 
Danke, das habe ich mir schon gedacht. Ich habe allerdings die Erfahrung gemacht, dass meine IDE den Verlauf der Methode dabei beachtet. Deswegen war ich etwas verwundert. Könntest du mir kurz zeigen, wie die getDirectionTo Methode auszusehen hat?
 

Zurück
Oben