ho trovato questo codice di controllo collisione Perfect Pixel e lo ha utilizzato nel mio codice:Pixel collisione perfetta con Config.ALPHA_8
public boolean isCollisionDetected(Bitmap bitmap1, int x1, int y1,
Bitmap bitmap2, int x2, int y2) {
Rect bounds1 = new Rect(x1, y1, x1 + bitmap1.getWidth(), y1
+ bitmap1.getHeight());
Rect bounds2 = new Rect(x2, y2, x2 + bitmap2.getWidth(), y2
+ bitmap2.getHeight());
if (Rect.intersects(bounds1, bounds2)) {
Rect collisionBounds = getCollisionBounds(bounds1, bounds2);
for (int i = collisionBounds.left; i < collisionBounds.right; i++) {
for (int j = collisionBounds.top; j < collisionBounds.bottom; j++) {
int bitmap1Pixel = bitmap1.getPixel(i - x1, j - y1);
int bitmap2Pixel = bitmap2.getPixel(i - x2, j - y2);
if (isFilled(bitmap1Pixel) && isFilled(bitmap2Pixel)) {
return true;
}
}
}
}
return false;
}
private Rect getCollisionBounds(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);
}
private boolean isFilled(int pixel) {
return pixel != Color.TRANSPARENT;
}
E ha funzionato perfettamente, nessun problema cosa così mai. Questo fino a quando ho impostare le immagini in Config_Alpha_8 utilizzando questo codice (a causa di problemi di RAM):
private Bitmap convert(Bitmap bitmap, Bitmap.Config config) {
Bitmap convertedBitmap =
Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), config);
Canvas canvas = new Canvas(convertedBitmap);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
canvas.drawBitmap(bitmap, 0, 0, paint);
return convertedBitmap;
}
Perché non succederà nulla, lo fa andare dentro isCollisioDetected, ho controllato con i registri! ma non rileva la collisione .. qualcuno può fornire una funzione di lavoro per il controllo della collisione perfetta dei pixel della bitmap con config_alpha_8?
Questo codice non influisce sulla bitmap per qualche motivo, non fa nulla, non lo colora di nero, e se lo uso e utilizzo anche il convertito non c'è ancora alcuna collisione. E sì io applico a nuovi bitmap caricato \t \t this.coin = BitmapFactory.decodeResource (getResources(), \t \t \t \t R.drawable.item_coin, opzioni); – SpoocyCrep
quando converto bitmap in alpha_8 diventano neri, quando ho usato questo codice non è cambiato nulla in bitmap, significa che hanno ancora la stessa quantità di RAM di prima, no? – SpoocyCrep
Dovrebbero usare meno. (1 byte per pixel). Potremmo provare a risolvere questo per chat: http://chat.stackoverflow.com/rooms/73375/android-pixel-perfect-collision –