【问题标题】:LibGDX - BoundingBox and Ray intersectionLibGDX - BoundingBox 和 Ray 相交
【发布时间】:2013-01-16 12:19:02
【问题描述】:

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

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

请帮帮我。

【问题讨论】:

    标签: collision-detection libgdx intersection


    【解决方案1】:

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

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

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

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

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

    另外,不要使用Ray 来检测交叉点(用于测试触摸点是否与框相交)。您应该使用 AABB 作为 shell,并使用 rectangle overlap test

    【讨论】:

    • 我想过从鼻子到尾巴画一条线。但是如果贝壳穿过底线左侧的鼻子,我就不适合了。当然,我可以创建垂直底线的第二条线。但我真的很想知道如何在示例中使用RayBoundingBox。不过还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多