【问题标题】:Calculate if Two Particles Come Close计算两个粒子是否接近
【发布时间】:2014-03-18 03:19:01
【问题描述】:

我正在 PSM Studio 中为 2D 游戏做一些简单的碰撞检测。

我当前的方法涉及遍历每个游戏对象并找到另一个游戏对象之间的距离,然后查看两者是否在一定距离内(通常是每个对象组合宽度的 1/2)。如果是,则认为它们发生了碰撞。

虽然这种方法在许多情况下都有效,但它有一个主要的后备方案。如果一个物体以这样的速度移动,使得每帧的移动大于潜在碰撞物体的宽度(即快速移动的射弹朝向敌人),则该物体将基本上传送到另一个物体上,即使它们会发生碰撞,他们没有。

我正在考虑创建一种在两条线段上测试两个粒子的方法。线段将由更新期间每个对象的开始结束位置组成。

知道每个物体的极地运动(角度和大小)以及它们各自的线段,我是否可以计算出两个粒子是否在那个神奇的距离内,这意味着它们已经发生了碰撞?

【问题讨论】:

    标签: line collision-detection game-engine particles line-segment


    【解决方案1】:

    我也遇到过这个问题,我的解决方法是在物体运动过程中检测碰撞。

    如果在循环过程中移动的距离大于对象的大小,我会将运动分解为几个较小的运动,并为每个分解解决碰撞。

    一个例子:

    盒子的移动速度超过了它自己的大小,因此不会检测到带有红色的检测。所以运动被分解成小的运动,并且在每一步中你检查与红线的碰撞。

    第三步,检测碰撞。

    我不知道这个解决方案是否适合你的 cicle 结构,但至少它可以给你带来一些新的想法。

    编辑:

    请注意,为确保检测到碰撞,您必须确保在移动中不留空隙。为了使这个过程尽可能快,并确保检查整个区域,您必须将运动分解为对象大小的分数。

    例如: 在上图中,让我们想象物体在运动前的位置是 0 个单位,最后是 100 个单位。

    如果对象的大小为 30 个单位,则必须检查以下位置:

    0, 30, 60, 90, 100
    

    在每个迭代中,您将位置增加对象的大小,直到到达目的地。

    请记住,如果您正在跑步,可以说...每秒 40 圈,在刚刚给出的示例中,对象将以以下速度移动:

    40 cicles x 100 units = 4000 units per second 
    

    如果每个单位是一个像素,并且您运行的是 800x600 分辨率,那么对象将以每秒超过四个屏幕的速度移动,这是一个巨大的速度。

    我只想指出,“高速”是相对而言的,除非您使用非常小的物体,否则此过程不会像最初预期的那样频繁发生。

    【讨论】:

    • 我可以试试这个想法。我看到的最大问题是如何在每次更新中分解移动而不会使游戏速度过慢。
    • 除非你有很多实体的移动速度超过它们自己的大小,否则你不应该有问题。考虑到这是一个比率:一个大实体不会运行这个过程,除非它移动得非常快(移动的空间必须大于实体在单个游戏中的大小)。即使您必须为许多实体运行此过程,它也会非常快,就像一个具有几乎微不足道操作的小循环一样。
    • 编辑了答案以阐明此问题的含义和解决方案。
    • 感谢您的帮助。我想我理解的足够多,可以在我的游戏中实现这一点。
    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2018-08-04
    • 2013-10-02
    • 2015-01-17
    相关资源
    最近更新 更多