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.
Wo liegt der Fehler ?
Danke im Voraus.
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.