# Kollisionserkennung von Bitmaps



## member42 (8. Nov 2018)

Hallo,
ich wollte eine Kollisionserkennung zwischen 2 Bitmaps machen. Dazu soll der überlappende Bereich der der beiden Bitmaps gefunden werden und dort dann geguckt werden, ob die Pixel der beiden Bitmaps transparent sind. Aber es scheint nicht ganz zu funktionieren, wie man auf dem Bild sieht: Zwischen den beiden Bitmaps(Vogel, Röhre) sind noch einige Pixel dazwischen, die Methode checkCollision() gibt aber dennoch schon true zurück.


```
public  boolean checkCollision(Bitmap bitmap1, int x1, int y1, Bitmap bitmap2, int x2, int y2) {

  Rect bitmap1Rect = new Rect(x1, y1, x1 + bitmap1.getWidth(), y1 + bitmap1.getHeight());
  Rect bitmap2Rect = new Rect(x2, y2, x2 + bitmap2.getWidth(), y2 + bitmap2.getHeight());


  if(Rect.intersects(bitmap1Rect, bitmap2Rect)) {

      Rect overlap = getOverlapRect(bitmap1Rect, bitmap2Rect);

      for(int i=overlap.left; i < overlap.right; i++) {
          for(int j=overlap.top; j < overlap.bottom; j++) {

              int bitmap1Pixel = bitmap1.getPixel(i - x1, j - y1);
              int bitmap2Pixel = bitmap2.getPixel(i - x2, j - y2);

              if(bitmap1Pixel==Color.TRANSPARENT && bitmap2Pixel==Color.TRANSPARENT) {
                  return true;
              }

          }
      }

  }
  return false;
}

private  Rect getOverlapRect(Rect rect1, Rect rect2) {

    int left = (int) Math.max(rect1.left, rect2.left);
    int top = (int) Math.max(rect1.top, rect2.top);
    int right = (int) Math.min(rect1.right, rect2.right);
    int bottom = (int) Math.min(rect1.bottom, rect2.bottom);

    return new Rect(left, top, right, bottom);
}
```

Wo liegt der Fehler ?
Danke im Voraus.


----------



## mihe7 (8. Nov 2018)

```
if(bitmap1Pixel==Color.TRANSPARENT && bitmap2Pixel==Color.TRANSPARENT) {
                  return true;
              }
```
Wieso true, wenn die Pixel transparent sind?


----------



## member42 (8. Nov 2018)

Danke,stimmt es muss 
	
	
	
	





```
if(bitmap1Pixel!=Color.TRANSPARENT && bitmap2Pixel!=Color.TRANSPARENT) {
    return true;
}
```
 heißen weil ich die transparenten Pixel ja ignorieren will.


----------

