我正在使用libGDX编写游戏,我需要检测多边形,但是Intersector.overlapConvexPolygons
方法返回的复杂形状根本不返回。
基于此,如果此方法返回与Rectangle检查相同的结果,那又有什么意义呢?
也许我做错了什么?
public Vector getOverlap(Entity a, Entity b){
Vector v=new Vector(); //my implementation of Vector2 class
Intersector.MinimumTranslationVector mv=new Intersector.MinimumTranslationVector();
if(Intersector.overlapConvexPolygons(a.getBounds(), b.getBounds(), mv)){
v.set(mv.normal.x, mv.normal.y).scl(mv.depth);
}
return v;
}
答案 0 :(得分:0)
您的多边形很可能不是凸形的,如果在扩展矢量线时定义多边形的线不相交,则将多边形定义为凸形。
要在LibGDX中使用凹面多边形,可以使用LibGDX随附的EarClippingTriangulator
类将凹面多边形拆分为三角形。在this question中可以找到有关如何使用此类拆分复杂多边形的示例。
Polygon
进行了三角剖分后,就可以创建一个对象来封装整个三角形集合,它具有自己的碰撞方法,该方法可以反复检查另一个Polygon
对象是否与任何{组成整个对象的Polygon
个组成部分。
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
}
}