Kollisionserkennung von Bitmaps

member42

Aktives Mitglied
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.

Java:
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.
 

Anhänge

  • screenshot.PNG
    screenshot.PNG
    3,8 KB · Aufrufe: 17

mihe7

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

member42

Aktives Mitglied
Danke,stimmt es muss
Java:
if(bitmap1Pixel!=Color.TRANSPARENT && bitmap2Pixel!=Color.TRANSPARENT) {
    return true;
}
heißen weil ich die transparenten Pixel ja ignorieren will.
 

Ähnliche Java Themen

Neue Themen


Oben