为什么不使用set()方法使用else-branch?

时间:2016-07-18 08:22:03

标签: if-statement methods processing

链接到我的草图: http://www.openprocessing.org/sketch/377417

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

当我删除第二个if语句时,船会降低其速度,但是当距离大于障碍物半径时不会加速。

set-method出了什么问题?

1 个答案:

答案 0 :(得分: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);
}