Ваши полигоны, скорее всего, не являются выпуклыми, полигоны определяются как выпуклые, если линии, определяющие многоугольник, не пересекаются при удлинении векторных линий.
Чтобы использовать вогнутые многоугольники в LibGDX, можно разбить вогнутый многоугольник на треугольники, используя класс EarClippingTriangulator
, включенный в LibGDX. Пример использования этого класса для разбиения сложного многоугольника можно найти в этом вопросе .
После того, как Polygon
был триангулирован, можно создать объект для инкапсуляции всего набор треугольников со своим собственным методом столкновения, который итеративно проверяет, перекрывается ли другой объект Polygon
каким-либо из составляющих Polygon
s, составляющих весь объект.
public class ConcavePolygon {
...
public boolean isColliding(Polygon polygon) {
for(Polygon triangle : triangles) {
if(Intersector.overlapConvexPolygons(polygon, triangle, mv)) {
return true; //Returns true if any triangles overlap polygon
}
}
return false; //Returns false if none overlap
}
public boolean isColliding(ConvexPolygon convexPolygon) {
for(Polygon triangle : triangles) {
if(convexPolygon.isColliding(triangle)) {
return true; //Returns true if any triangles overlap convex polygon
}
}
return false; //Returns false if none overlap
}
}