我正在研究Android Studio中的位图碰撞(检测两个图像实际碰撞的时间,而不仅仅是两个镜像),我编写了以下方法。代码的第一部分 - 所有if语句 - 用于确定两个相交矩形的位置,并创建一个由交叉矩形之间的重叠组成的矩形。代码的第二部分尝试迭代新创建的矩形中的每个像素,并确定它是否透明。但是,为了做到这一点,我使用pic1.getPixel(pic1和pic2是我的两个位图,其中包含有效图像)但每次尝试使用getPixel时程序都会崩溃。此外,我检查以确保代码的第一部分正常工作,它确实。为什么会这样?
public Boolean isCollision(Rect r1, Rect r2 )
{
if(r1.intersect(r2))
{
Rect r3 = new Rect(0,0,0,0);
if (r2.left < r1.right && r2.top < r1.bottom && r2.right > r1.right && r2.bottom > r1.bottom)
{
r3.set(r2.left, r2.top, r1.right, r1.bottom);
}
else if (r2.right > r1.left && r2.top < r1.bottom && r2.left < r1.left && r2.bottom > r1.bottom)
{
r3.set(r1.left, r2.top, r2.right, r1.bottom);
}
else if (r2.left < r1.right && r2.bottom > r1.top)
{
r3.set(r2.left, r1.top, r1.right, r2.bottom);
}
else if(r2.right > r1.left && r2.bottom > r1.top)
{
r3.set(r1.left, r1.top, r2.right, r2.bottom);
}
Log.v("Debugging", "Made it part the overlapping rectangle creation");
for (int i = r3.left; i<r3.right; i++)
{
for (int j = r3.top; j < r3.bottom; j++)
{
/*Log.v("Debugging","Pixel 1: " + Integer.toString(pic1.getPixel(i,j)));
Log.v("Debugging","Pixel 2: " + Integer.toString(pic2.getPixel(i,j)));
Log.v("Debugging","Transparent color: " + Integer.toString(Color.TRANSPARENT));*/
if (pic1.getPixel(i,j) != Color.TRANSPARENT)
{
if (pic2.getPixel(i,j) != Color.TRANSPARENT)
{
return true;
}
}
}
}
Log.v("Debugging", "Made it past the pixel search");
}
return false;
}
答案 0 :(得分:0)
我弄清楚了,结果是x和y值,我正在使用基于屏幕坐标系的像素位置。但是,对于getPixel,0,0点位于您尝试获取像素的图像的右上角。因此,当我使用getPixel(i-rect.left,j-rect.top)
时,问题就解决了