colisiones por píxel usando Libgdx Java (¿hay class existente para esto?)?

Estoy haciendo un simple juego de disparos espaciales de desplazamiento lateral utilizando Libgdx y todo va bien. Sin embargo, hasta ahora no he estado probando colisiones para mis jugadores con otros barcos. Tengo los láseres colisionando con barcos malos usando el método de superposition de rectángulo simple que ya existe en libgdx.

Pero el espacio "blanco / transparente" alnetworkingedor del borde de muchos de mis sprites es bastante y cuando ahora estoy aplicando el código para verificar la colisión con mi reproductor, está sucediendo muy lejos de una colisión real. En el pasado utilicé XNA Framework C # y había una forma bastante simple de hacer una colisión de cuadro y luego, dentro de esa testing, si ambos píxeles en cuestión eran transparentes y SOLO CUANDO ambos píxeles NO eran transparentes, el resultado sería verdadero como colisión.

Realmente estoy luchando para encontrar este método o cómo implementarlo usando LibGDX, ¿alguien puede ayudarme aquí?

Aquí está el fragment de código en cuestión, si necesitas el código completo de los juegos, por favor avísame:

if (ship.getBoundingRectangle().overlaps(baddiePurple.getBoundingRectangle())){ purpleDyingSound.play(); KillPurpleSoloEnemy(); game.setScreen(new MenuScreen(game)); } 

Por supuesto, soy consciente de que podría recortar todas las imágenes para tener casi cero bordes transparentes, pero el problema es que son sprites animados en hojas de sprites y no puedo colocarlos en la position correcta si lo bash ese. (Además, planeo tener MUCHOS enemigos diferentes, etc. y el recorte sería una gran balada)

¡GRACIAS DE ANTEMANO POR CUALQUIER AYUDA! ¡tranquilízate!

La mayoría de los juegos que necesitan el tipo de precisión que deseas usan una colisión poligonal. Mi favorito es el Teorema de separación de Hyperplane . No obtendrás una colisión perfecta, pero definitivamente networkingucirá el problema que estás experimentando. La colisión no necesita ser absolutamente perfecta; el jugador no se dará count cuando estén en el fragor de la acción. La colisión solo necesita ser lo suficientemente buena.

Para LibGDX, puede usar la class Intersector para detectar colisiones poligonales:

 Polygon polygonA = new Polygon(new float[] { 0, 0 // Vertices (x,y) 5, 0, 5, 5 }); Polygon polygonB = new Polygon(new float[] { -10, 0 10, 0, 5, 10 }); if(Intersector.overlapConvex(polygonA, polygonB)) { // Polygons overlap = collision } 

Los vértices deben declararse en sentido antihorario (no estoy seguro de si esto es un requisito para el algorithm de intersección particular de LibGDX, pero la mayoría lo hace para no tener el hábito de hacerlo). La única limitación es que los polígonos deben ser convexos. Sin embargo, esto puede resolverse fácilmente dividiendo los polígonos en polígonos más pequeños que son convexos, mientras que la forma general de todos los polígonos es cóncava.

¿Xna admite la detección de colisiones basada en gpu de fábrica? Libgdx no tiene tal cosa.

En general, no recomendaría escribir su propia implementación de colisión y usar box2d. Por supuesto, puede usar intersector para un enfoque más simple, pero rápidamente se encontrará con problemas de performance y tendrá que resolver problemas como la partición espacial y comprobar la fase amplia / estrecha que ya tiene box2d.