gpt4 book ai didi

java - Sprite 碰撞检测如何工作?

转载 作者:行者123 更新时间:2023-11-30 10:19:50 24 4
gpt4 key购买 nike

我正在尝试了解 libgdx 中两个参与者的碰撞检测。这就是我在做的

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 如何提供足够的信息来检测碰撞,是不是丢失了一些信息?

最佳答案

Sprite 碰撞检测通过检查两个对象的 x 和 y 值是否共享坐标来工作。如果发生这种情况,那么您就知道对象发生了碰撞。对象的 xy 值也包括形状内的值。

但是,有几种方法可以检查它们是否共享 xy 坐标,而无需检查所有可能性。

  • 对于 x 值,您可以检查另一个形状是否在 x 位置和 x 位置 + 之间宽度

  • 对于 y 值,您可以检查另一个形状是否在 y 位置和 y 位置 + 之间高度

这会根据边的形状和数量而变化。

关于java - Sprite 碰撞检测如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48406640/

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