2016-07-18 7 views
1

Link zu meiner Skizze: http://www.openprocessing.org/sketch/377417Warum funktioniert der else-Zweig nicht mit der set() - Methode?

void check(ship s){ 
float d = dist(s.getX(),s.getY(),this.posx,this.posy); 
if (d <= this.radius){ 
s.setSpeed(0.5); 
} 
if (d > this.radius){ 
s.setSpeed(2); 
} 
} 

Wenn ich die zweite if-Anweisung löschen, reduziert das Schiff seine Geschwindigkeit, sondern beschleunigen nicht, wenn der Abstand größer ist als der Radius des Hindernisses ist.

Irgendetwas stimmt nicht mit der Set-Methode?

Antwort

0

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); 
} 
Verwandte Themen