我正在研究一个程序,它模拟在一个字段中移动的对象。该领域具有1024x1024的界限。该对象不能在x,y坐标下低于0,并且它不能超过1024.我为每个对象创建一个名为“move()”的方法,以当前速度将对象移动到当前方向。如果物体接近边界,它会以新的方向和相同的速度转向。移动的物体卡在角落
我遇到的问题是,当我的一个对象接近x和y边界(字段的角落)时,它会卡在角落里。就好像它试图远离角落,但随后又转回来。它必须喜欢那个角落。我查看了我的代码和我,我的逻辑似乎是正确的。我检查以确保新的方向不是负的或超过359.我检查以确保新的x,y与新方向的坐标也在范围内。我甚至有办法设定一个新的方向。
我试过用不同的逻辑重新实现这个方法,但没有运气。如果有人可能在我的编程中发现缺陷或指出可能导致它的原因,那么将非常感激。
我试图调试并逐步通过我的程序,我发现当它到达角落时,它会改变方向转向,移动大约3个空格,然后回到角落。必须是一个美妙的角落。
代码移动方法如下:
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;
}
我们还需要设置'direction'的代码。可能它出于某种原因偏向于朝着角落移动。 – Donnie 2010-11-12 00:50:54
没问题,上面加了。 – Seephor 2010-11-12 00:54:08
setDirection((direction + 180)%360)。摆脱那些如果。 – 2010-11-12 00:54:54