我试图了解libgdx中两个actor的碰撞检测。 这就是我正在做的事情
Rectangle rect1 = sprite1.getBoundingRectangle();
Rectangle rect2 = sprite2.getBoundingRectangle();
if(rect1.overlaps(rect2))
//collision occured
else
//no collision
到目前为止还不错,但是如果你在Actor类中看到了getBoundingRectangle()的代码
public Rectangle getBoundingRectangle () {
final float[] vertices = getVertices();
float minx = vertices[X1];
float miny = vertices[Y1];
float maxx = vertices[X1];
float maxy = vertices[Y1];
minx = minx > vertices[X2] ? vertices[X2] : minx;
minx = minx > vertices[X3] ? vertices[X3] : minx;
minx = minx > vertices[X4] ? vertices[X4] : minx;
maxx = maxx < vertices[X2] ? vertices[X2] : maxx;
maxx = maxx < vertices[X3] ? vertices[X3] : maxx;
maxx = maxx < vertices[X4] ? vertices[X4] : maxx;
miny = miny > vertices[Y2] ? vertices[Y2] : miny;
miny = miny > vertices[Y3] ? vertices[Y3] : miny;
miny = miny > vertices[Y4] ? vertices[Y4] : miny;
maxy = maxy < vertices[Y2] ? vertices[Y2] : maxy;
maxy = maxy < vertices[Y3] ? vertices[Y3] : maxy;
maxy = maxy < vertices[Y4] ? vertices[Y4] : maxy;
if (bounds == null) bounds = new Rectangle();
bounds.x = minx;
bounds.y = miny;
bounds.width = maxx - minx;
bounds.height = maxy - miny;
return bounds;
}
它返回sprite的(minx,miny,x projection,y projection),我们如何根据这些信息确定碰撞,IMO你需要所有四个坐标来确定碰撞对吗?因为在上述情况下,一个面向+ 45°和-45°的矩形可以具有相同的BoundingRectangle。
总结一下这个问题,BoundingRectangle如何用于检测碰撞的信息,是不是丢失了一些信息?
答案 0 :(得分:1)
Sprite碰撞检测的工作原理是检查两个对象的x和y值是否共享一个坐标。
如果发生这种情况,那么您就知道对象已经发生碰撞。对象的x
和y
值还包括形状内的值。
但是,有几种方法可以检查他们是否共享x
和y
坐标而不检查所有可能性。
对于x
值,您可以检查其他形状是否在x
位置和x
位置+ width
之间。
对于y
值,您可以检查其他形状是否在y
位置和y
位置+ height
之间。
这会根据边的形状和数量而变化。