gpt4 book ai didi

java - 奇怪的多边形碰撞检测

转载 作者:行者123 更新时间:2023-12-01 18:59:13 25 4
gpt4 key购买 nike

我正在使用 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;
}

截图如下: enter image description here enter image description here enter image description here

最佳答案

您的多边形很可能不是凸的,如果定义多边形的线在 vector 线延伸时不相交,则多边形被定义为凸的。

Difference between concave and convex polygons diagramatically

要在 LibGDX 中使用凹多边形,可以使用 LibGDX 中包含的 EarClippingTriangulator 类将凹多边形分割成三角形。如何使用此类分割复杂多边形的示例可以在 this question 中找到。 .

一旦对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
}
}

关于java - 奇怪的多边形碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59651890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com