【发布时间】:2011-05-25 02:57:53
【问题描述】:
我正在尝试检查两个数组之间的碰撞,一个是移动矩形,另一个是固定边界(试图让矩形从墙上反弹)。
问题是我编写了一个嵌套的 for 循环,它似乎适用于 4 个边界中的 2 个。我的循环没有达到所有可能的组合吗?
这是我的循环:
for(int n=0;n<_f;n++){
for(int m=0;m<_b;m++){
if(farr[n].inter(barr[m]))
farr[n].setD();
}
}
_f 计算移动的矩形(从 0 开始并在每个添加后增加),_b 计算边界。 inter() 是我用来检测碰撞的一种方法,它在我程序的所有其他部分都有效。
任何帮助将不胜感激, 提前谢谢!!!
public boolean inter(Rect rect){
if(Rect.intersects(rect, rec))
return true;
else
return false;
}
setD() 方法:
public void setD(){
if(_d==0)
_d=2;
if(_d==1)
_d=3;
if(_d==2)
_d=0;
if(_d==3)
_d=1;
}
使用_d的move方法:
public void moveF(){
if(_d==0){_l+=_s;_r+=_s;}
if(_d==1){_t+=_s;_b+=_s;}
if(_d==2){_l-=_s;_r-=_s;}
if(_d==3){_t-=_s;_b-=_s;}
}
_l 是左侧,_t 是顶部,_r 是右侧,_b 是底部,_s 是每次迭代移动多少像素(在所有情况下都设置为 1)
【问题讨论】:
-
在两次评估之间你的对象是否有可能穿透墙壁?
-
我不这么认为,我是在低速测试它们,可能至少要经过 10 次迭代才能穿过墙壁
-
在您循环时是否有另一个线程正在修改数组?
-
它适用于哪两个边界?可能在同一轴上的那些?或者也许那些没有通过原点?如果你削减到一个对象,你仍然看到问题吗?如果是这样,您可以在问题墙附近启动它,然后按一个键激活每个时间步长,同时观察日志输出
-
稍后执行循环的方法告诉移动的矩形移动。边界都是不同尺寸的矩形,但工作的边界是覆盖整个屏幕左侧和整个屏幕顶部。
标签: android collision-detection