我用以下方法实现了这些检查,而不使用Box2D:
检查多边形和矩形之间的碰撞:
private boolean isCollision(Polygon p, Rectangle r) {
Polygon rPoly = new Polygon(new float[] { 0, 0, r.width, 0, r.width,
r.height, 0, r.height });
rPoly.setPosition(r.x, r.y);
if (Intersector.overlapConvexPolygons(rPoly, p))
return true;
return false;
}
检测多边形和圆形之间的碰撞:
private boolean isCollision(Polygon p, Circle c) {
float[] vertices = p.getTransformedVertices();
Vector2 center = new Vector2(c.x, c.y);
float squareRadius = c.radius * c.radius;
for (int i = 0; i < vertices.length; i += 2) {
if (i == 0) {
if (Intersector.intersectSegmentCircle(new Vector2(
vertices[vertices.length - 2],
vertices[vertices.length - 1]), new Vector2(
vertices[i], vertices[i + 1]), center, squareRadius))
return true;
} else {
if (Intersector.intersectSegmentCircle(new Vector2(
vertices[i - 2], vertices[i - 1]), new Vector2(
vertices[i], vertices[i + 1]), center, squareRadius))
return true;
}
}
return false;
}
这里所展示的Poly/Circle检测是由Cristiano Santos在这个帖子中编写的,而Poly/Rect检测是我想出的一个快速自制解决方案。
if (Intersector.overlapConvexPolygons(rPoly, p)) return true; return false;
couldn't this just be:return Intersector.overlapConvexPolygons(rPoly, p)
- Wolforce