In Zukunft stellen Sie bitte eine MCVE direkt in Ihrem Beitrag zur Verfügung, anstatt uns zu externen Websites zu gehen. Bitte verwenden Sie auch Standard-Namenskonventionen: Klassen sollten mit einem Großbuchstaben beginnen. Wenn Sie schon dabei sind, würde auch die Standardformatierung (Einrückung Ihres Codes) helfen.
Das heißt, Ihr Problem wird dadurch verursacht: Denken Sie darüber nach, wie Sie Ihre check()
Funktion aufrufen. Sie nennen es für jedes Hindernis. Dann stellst du die Geschwindigkeit des Schiffes basierend auf der Entfernung von diesem Hindernis ein.
Das Problem ist, sagen Sie, dass Sie nur zwei Hindernisse haben. Das erste Hindernis kollidiert mit dem Schiff, also stellst du seine Geschwindigkeit auf 0.5
. Dann kontrollierst du das zweite Hindernis, das nicht mit dem Schiff kollidiert, also setze seine Geschwindigkeit auf 2
. Mit anderen Worten, Sie ändern nur die Schiffsgeschwindigkeit basierend auf dem letzten obstacle
in der Schleife.
Wenn Sie den Anruf zu setSpeed(2)
herausnehmen, dann wird Ihr Schiff natürlich nie die Geschwindigkeit zurück auf 2
ändern.
Sie müssen Ihren Code umgestalten, so dass Sie die Geschwindigkeit auf 0.5
einstellen, wenn das Schiff mit Hindernis kollidiert. Es könnte in etwa so aussehen:
boolean collides = false;
for(Obstacle o : obstacles){
if(o.collidesWith(ship)){
collides = true;
break;
}
}
if(collides){
ship.setSpeed(.5);
}
else{
ship.setSpeed(2);
}