0

LibGDX 具有Intersector包含intersectRayBoundsFast函数的类。我想知道怎么用?首先如何像下面这样限制我的飞机?:

在此处输入图像描述

第二个问题是如何正确移动这个BoundingBox?没有类似的函数setPositionrotate等等。第三个是如何创建正确的Ray对象来找到外壳和飞机之间的交点?

在此处输入图像描述

请帮帮我。

4

1 回答 1

0

通常边界框是粗略的测试。为了测试速度,边界框通常是“轴对齐的”(缩写为“AABB”),特别是这意味着它们不随对象旋转,而是随着包含的对象旋转而调整大小。(您在问题中包含的图像是飞机精灵的 AABB 的合理示例。)

边界框相交测试运行速度很快,因此它们可以消除所有完全不相关的元素,但会留下一组可能会被击中的元素。之后,您可以(如果有必要,而且通常没有必要)进行更精确的相交测试。例如,基于底层几何或使用基于像素的射线相交。请注意,像素碰撞在 libGDX 中很复杂

对于您的具体情况,我认为您可以将飞机建模为线。想象一下从机头到机尾画一条线,如果炮弹击中那条线,它就会击中飞机。您实际上并不需要精确的基于像素的碰撞检测(这种方法看起来已经足够好了)。

假设你的壳是垂直移动的,你只需要计算两条线段的交点:计算交点的高效数学算法

话虽如此,您甚至可能不需要那么精确,并且可以摆脱基于粗略的 AABB 测试。例如,在底部图像中,虽然外壳实际上还没有与平面相交,但它显然会相交。假设它移动得足够快,玩家将无法分辨。如果您想让游戏更轻松或更宽容,您可以通过使边界框更小一些(也许留下一些框的尾端)来稍微捏造它。

另外,不要使用Ray检测交叉点(用于测试触摸点是否与框相交之类的事情)。您应该为外壳使用 AABB,并进行矩形重叠测试

于 2013-01-16T18:00:24.437 回答