2013-01-16 30 views
0

LibGDX有Intersector类,其中包含intersectRayBoundsFast函数。我想知道如何使用它?首先,如何界定我的飞机像下面?:LibGDX - BoundingBox和Ray交集

enter image description here

第二个问题是如何正确地移动此BoundingBox?没有像,rotate等这样的功能。 第三个是如何创建正确的Ray对象来找到壳和飞机之间的交集?

enter image description here

请帮助我。

回答

0

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

边框相交测试快速运行,这样他们就可以消除所有,是完全不相干的元素,但留给你一组可能被击中的物品。之后,你可以做(​​如有必要,往往没有必要)更精确的相交测试。例如,基于底层几何图元或使用基于像素的光线交点。请注意像素冲突是complicated in libGDX

对于您的具体情况,我认为您可以模拟飞机的线路。想象一下,从鼻子到尾巴画一条线,如果壳击中那条线,它就会撞上飞机。你并不需要精确的基于像素的碰撞检测(这种方法看起来不错)。

假设你的壳垂直移动,你只需要计算两条线段的交集:Efficient maths algorithm to calculate intersections

所有这一切说,你可能甚至不需要是精确和可以逃脱粗基于AABB的测试。例如,在底部图像中,虽然外壳实际上并未与飞机相交,但它很明显。假设其移动速度足够快,玩家将无法辨别。如果你想让游戏变得更加宽容或者更加宽容,你可以通过将边界框缩小一些(也许会留下一些盒子的尾部)来改变它。

另外,不要使用Ray来检测交集(这是为了测试接触点是否与框相交)。您应该使用AABB作为外壳,并执行rectangle overlap test

+0

我想过从鼻子到尾巴的线条。但它不适合我,如果壳穿过底线左侧的鼻子。当然,我可以创建垂直于底线的第二条线。但我真的很想知道如何在例子中使用'Ray'和'BoundingBox'。不过谢谢! – Nolesh