我正在开发一个模拟在田野中移动的物体的程序。该字段的边界为 1024x1024。就 x,y 坐标而言,该对象不能低于 0,也不能高于 1024。我为每个对象提供了一个名为“move()”的方法,该方法以当前速度沿当前方向移动对象。如果物体接近边界,它就会以新的方向和相同的速度转身。
我遇到的问题是,当我的一个对象靠近 x 和 y 边界(场地的角落)时,它就会卡在角落里。就好像它正试图从拐角处移开,但随后又转身。它一定很喜欢那个角落。我查看了我的代码,对我来说,我的逻辑似乎是正确的。我检查以确保新方向不是负数或超过 359。我检查以确保与新方向的新 x、y 坐标也在边界内。我什至有一种方法可以设定一个新的方向。
我试过用不同的逻辑重新实现这个方法,但没有运气。如果有人可能在我的编程中发现缺陷或指出可能导致它的原因,那将不胜感激。
我尝试调试并逐步执行我的程序,我看到当它到达拐角时,它改变方向转身,移动大约 3 个空格,然后回到拐角处。一定是一个美妙的角落。
move方法的代码如下:
public void move(){
localX = super.getX();
localY = super.getY();
float newX=0, newY=0;
float testX, testY;
boolean acceptX = false, acceptY = false;
testX = (float) (Math.cos(direction)*10) + localX;
testY = (float) (Math.sin(direction)*10) + localY;
int testDirection;
while(!acceptX){
if(testX >= 0 && testX <= bound){
newX = testX;
acceptX = true;
}//end if statement
else{
if(direction+180 > 359){
setDirection(direction-180);
testX = (float) (Math.cos(Math.toRadians(direction))*speed) + localX;
}
else{
setDirection(direction+180);
testX = (float) (Math.cos(Math.toRadians(direction))*speed) + localX;
}
}//end else
}//end while that checks for X value
while(!acceptY){
if(testY >= 0 && testY <= bound){
newY = testY;
acceptY = true;
}//end if statement
else{
if(direction+180 > 359){
setDirection(direction-180);
testY = (float) (Math.sin(Math.toRadians(direction))*speed) + localY;
}
else{
setDirection(direction+180);
testY = (float) (Math.sin(Math.toRadians(direction))*speed) + localY;
}
}//end else
}//end while that checks for Y value
super.setX(newX);
super.setY(newY);
}
这是 setDirection 的代码
public void setDirection(int d) {
direction = d;
}