2016-07-18 3 views
1

링크 : 내가 두 번째 경우 문을 삭제 set() - 메서드로 else-branch가 작동하지 않는 이유는 무엇입니까? 내 스케치

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

http://www.openprocessing.org/sketch/377417

, 배는 속도를 감소 시키지만의 거리가 장애물의 반경보다 큰 경우 가속하지 않습니다.

설정 방법에 문제가 있습니까?

답변

0

앞으로는 외부 웹 사이트로 이동하지 않고 게시물에 MCVE을 직접 입력하십시오. 또한 표준 명명 규칙을 사용하십시오. 클래스는 대문자로 시작해야합니다. 표준 형식 (들여 쓰기)을 사용하면 도움이됩니다.

귀하의 문제는 다음과 같은 이유로 발생합니다. check() 기능을 어떻게 호출하는지 생각해보십시오. 모든 장애물에 대해 호출합니다. 그런 다음 장애물로부터의 거리를 기준으로 배속을 설정합니다.

문제는 단지 두 가지 장애물이있는 것입니다. 첫 번째 장애물이 함선과 충돌하므로 속도를 0.5으로 설정합니다. 그런 다음 우주선과 충돌하지 않는 두 번째 장애물을 확인하여 속도를 2까지 다시 설정합니다. 즉, 루프의 마지막 obstacle을 기반으로 한 배의 속도 만 변경합니다.

setSpeed(2)으로 전화를 거는 경우 우주선은 절대로 속도를 다시 2으로 바꿀 수 없습니다.

어떤 장애물이든 배가 충돌하는 경우 속도를 0.5으로 설정하도록 코드를 리팩토링해야합니다. 장애물. 다음과 같이 표시 될 수 있습니다.

boolean collides = false; 
for(Obstacle o : obstacles){ 
    if(o.collidesWith(ship)){ 
     collides = true; 
     break; 
    } 
} 
if(collides){ 
    ship.setSpeed(.5); 
} 
else{ 
    ship.setSpeed(2); 
} 
관련 문제