【问题标题】:how to detect collision between two sprites in libgdx?如何检测 libgdx 中两个精灵之间的碰撞?
【发布时间】:2014-10-27 14:20:22
【问题描述】:

我正在学习 libgdx。我想使用 libgdx 创建一个 2d fps 游戏,它基本上没有物理环境。在这种情况下,会有很多碰撞(例如很多子弹击中多个物体)。我需要检查每个精灵的矩形与其他精灵的相交。这样可能会有上千个精灵,每次检查每个精灵与其他 999 个精灵肯定不是一个好主意。

  • libgdx 有scene2d,它有命中检测api,这能解决我的问题吗? 或
  • 我应该使用 box2d 碰撞检测吗? 或
  • 还有其他方法可以检测 libgdx 中的冲突吗?

【问题讨论】:

    标签: java android libgdx box2d


    【解决方案1】:

    我想创建一个 2d fps 游戏

    据我所知,FPS 的意思是“第一人称射击游戏”-> 具有第一人称视角的射击游戏。也就是说,它是 3D 的。
    所以请澄清你的意思。

    现在到碰撞检测问题:

    1. Scene2Ds 命中检测用于触摸等输入或 鼠标事件。所以它被用来检测,如果一个Actor被触摸, 点击...
    2. Box2D 是一个 2D 物理引擎,它不仅可以进行碰撞 为您检测,但它也可以进行碰撞响应 作为物理模拟(重力和类似的东西)。
    3. Libgdx 提供了Intersector 类,您可以将其用于
      overlap 测试。碰撞的组织/管理 检测由您决定。

    如果你能告诉我们你的游戏应该如何运作,你的世界应该如何管理等等,那就更好了。
    例如,如果您的世界是基于瓷砖的,那么墙壁和玩家之间的碰撞检测可以是一个简单的检查,如果瓷砖被占用 -> 碰撞,如果没有 -> 没有碰撞。
    了解对象的形状也很重要。矩形-矩形碰撞检测不同于矩形-圆形碰撞检测。
    所以现在有 3 个解决方案可以解决您的问题:
    - 使用Box2D 并阅读如何使用它的教程
    - 对碰撞检测进行一些研究,阅读教程并查看一些示例项目
    - 向我们提供有关游戏、其对象、形状等的更多信息。

    【讨论】:

    • 明白了.. 首先我的游戏不是基于瓷砖的。我不知道第一人称射击游戏是卑鄙的 3d,但我的游戏就像只通过顶视图玩使命召唤。所以它是二维的,不需要添加物理,并且会有很多敌人,车辆,子弹,掩体等。所以正如你提到的带有一些碰撞检测算法的 Intersector 类解决了我的问题?
    • 所以它是一个自上而下的射击游戏。 Intersector 类有一些方法可以告诉你,如果某些特定对象重叠。你可以看看它所有的方法,你应该想想你需要什么方法。例如Intersector 有一个方法overlapConvexPolygons,它可以测试两个凸多边形之间的碰撞。但是管理本身(何时以及如何调用Intersector 方法)以及碰撞响应取决于您。
    猜你喜欢
    • 2017-08-07
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    相关资源
    最近更新 更多