繁体   English   中英

Java / libGDX - 如何检查多边形与Rectangle或Circle的碰撞

[英]Java/libGDX - how to check Polygon collision with Rectangle or Circle

我是libGDX的新手,从我所知道的Intersector类有重叠方法的矩形/矩形,圆/圆,圆/矩形和多边形/多边形,但由于某种原因它似乎没有任何方法检查多边形/矩形或多边形/圆形。

是否有推荐的方法来检查多边形和矩形/圆形之间的碰撞?

另外,是否有一些理由将其排除在Intersector类之外? (也就是说,我应该避免它吗?如果是这样,建议的替代方案是什么?)

我用来实现没有Box2D的这些检查的解决方案如下。

检查多边形和矩形之间的碰撞:

// Check if Polygon intersects Rectangle
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;
}

检查Polygon和Circle之间的碰撞:

// Check if Polygon intersects Circle
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检查是我想出的一个快速的自制程序解决方案。

处理这些冲突的最佳方法是使用像Box2D这样的物理引擎,它已经包含了Libgdx。 当Box2D发生冲突时,事件会被触发,您可以轻松处理该事件。 所以你应该看看这里

当然还有其他处理碰撞检测的方法。 通过一些数学运算,您可以很容易地找出自己需要的东西,Box2D还有很多其他功能可以让您受益。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM