我有以下功能,它会告诉我2个精灵在x轴上重叠的时间:
public int getSecondObjectX(int secObjWidth)
{
int rndX = random.nextInt(AndroidApplication.getInstance().device_width - secObjWidth);
Rect sObj = new Rect(rndX, 20, rndX + secObjWidth, 10);
Rect droid = new Rect(myAnimation.getXcord(), 20, myAnimation.getXcord() + myAnimation.getCurrentImage().getWidth(), 10);
Log.d("Compare Rect", "["+sObj.left+", "+sObj.right+"] ["+droid.left+", "+droid.right+"]");
if(Rect.intersects(sObj, droid))
{
Log.d("INTERSECT", "INTERSECT");
return getSecondObjectX(secObjWidth);
}
else
return rndX;
}
但我从未得到过相交,这里是Logcat:
03-19 15:08:12.617: D/Compare Rect(631): [183, 231] [141, 189] <-- should be true
03-19 15:08:22.186: D/Compare Rect(631): [158, 206] [172, 220] <-- should be true
03-19 15:08:26.346: D/Compare Rect(631): [123, 171] [178, 226]
03-19 15:08:30.146: D/Compare Rect(631): [156, 204] [155, 203] <-- should be supertrue
03-19 15:08:32.617: D/Compare Rect(631): [84, 132] [172, 220]
问题是什么?
答案 0 :(得分:3)
构建Rect
的方式是错误的。 public Rect (int left, int top, int right, int bottom)
构造函数不执行范围检查。您可以在文档中找到以下内容:
注意:不执行范围检查,因此调用者必须确保左&lt; = right和top&lt; = bottom。
在您的情况下,顶部&gt;底部。