链接到我的草图: 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出了什么问题?
答案 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);
}