Kollisionserkennung von Bitmaps

Diskutiere Kollisionserkennung von Bitmaps im Mobile Geräte Forum; Hallo, ich wollte eine Kollisionserkennung zwischen 2 Bitmaps machen. Dazu soll der überlappende Bereich der der beiden Bitmaps gefunden werden...

  1. member42
    member42 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.

    Code (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:

  2. Vielleicht hilft dir dieses Training hier weiter.
  3. mihe7
    mihe7 Bekanntes Mitglied
    Code (Java):

                  if(bitmap1Pixel==Color.TRANSPARENT && bitmap2Pixel==Color.TRANSPARENT) {
                      return true;
                  }
     
    Wieso true, wenn die Pixel transparent sind?
     
    member42 gefällt das.
  4. member42
    member42 Mitglied
    Danke,stimmt es muss
    Code (Java):
     
    if(bitmap1Pixel!=Color.TRANSPARENT && bitmap2Pixel!=Color.TRANSPARENT) {
        return true;
    }
    heißen weil ich die transparenten Pixel ja ignorieren will.
     
  5. Wenn du Java lernen möchtest, empfehlen wir dir diese Online-Training hier
Die Seite wird geladen...

Kollisionserkennung von Bitmaps - Ähnliche Themen

Kollisionserkennung bei rotierten Bitmaps bzw. Rects
Kollisionserkennung bei rotierten Bitmaps bzw. Rects im Forum Mobile Geräte
Java Game verbesserte Kollisionserkennung
Java Game verbesserte Kollisionserkennung im Forum Spiele- und Multimedia-Programmierung
JavaFX Kollisionserkennung
JavaFX Kollisionserkennung im Forum Spiele- und Multimedia-Programmierung
Jump 'n' Run-Spiel Kollisionserkennung
Jump 'n' Run-Spiel Kollisionserkennung im Forum Spiele- und Multimedia-Programmierung
Kollisionserkennung, JavaFX
Kollisionserkennung, JavaFX im Forum AWT, Swing, JavaFX & SWT
Thema: Kollisionserkennung von Bitmaps