当前位置: 首页 > 知识库问答 >
问题:

不规则形状的碰撞检测

孔阎宝
2023-03-14

我知道如何检查一个圆是否要与一个正方形相撞,我知道如何检测一个正方形是否要与一个正方形相撞,但是如果一个多边形要与一个正方形相撞,我该如何检测呢?

或者更好的是,当一个多边形将要与另一个多边形碰撞时。

或者更好的是,当由非直线组成的形状与另一个类似的形状(多边形或圆形/矩形)发生冲突时

有什么方法可以得到一个图形可能占用的像素和另一个图形可能占用的像素,并检查它们是否相同?

我希望有一些解决方案不需要大量的形状特定计算。

我使用javascript和html5画布来实现这一点。

共有2个答案

王涵育
2023-03-14

最简单的方法是使用边界框,只需找到物体的mins和maxs并从中制作一个框。要做一个多边形到另一个多边形,你需要一种方法来存储多边形的边缘,另一种方法来确定哪些点或边缘与另一个物体发生了碰撞。从这里你可以决定如何对碰撞做出反应。

边界框实现起来很简单,但并不十分精确。使用多边形本身的实际边更精确,但更难处理,速度也慢得多。

杨研
2023-03-14

这不是一件简单的事情。如果你对一个函数可以判断两个多边形是否正在碰撞(并且你可以回滚它们)感到满意,那么解决方案并不难。你只需要检查多边形的任何两条边是否相互交叉。这可以通过一些数学来完成,对于大形状或大量多边形,它会侵蚀性能。为了解决这个问题,你可以使用空间分区和边界卷。

更新:可以基于此计算线的交点。然后您需要检查该点是否位于两个线段中。为此,可以使用线段的endpoint,如果线段实际包含点,则ua和ub变量将介于0-1之间。

 类似资料:
  • 我目前正在制作松软的小鸟,我把它从矩形改成了我自己的图像等等。我似乎不知道该怎么做,当鸟(不规则形状)撞到矩形时,它就死了。当碰撞的形状很奇怪时,我不知道如何编写碰撞代码。这是一张图片。我把鸟画成这样。 附上游戏的图片,鸟,和代码。

  • 我想做一个游戏,有每一个水平加载从一个图像。我想在Photoshop中把整个关卡画出来,然后把它设置为背景并允许玩家走过去。我想要另一个看不见的图像超过顶部,这将是黑色的所有地方,我想要碰撞。 我不想使用瓷砖的原因,这是更容易与矩形碰撞和诸如此类,因为将有复杂的角,并不是所有将是矩形。 这是一个好主意吗?有没有可能轻松做到?这将是一个巨大的CPU拥有者还是有更好的方法做到这一点?

  • 我正在尝试做一些碰撞检测。对于这个测试,我使用了一个简单的矩形,并检查它们的,以确定它们是否碰撞。尽管检测没有如预期那样工作。我尝试过使用不同的方法来移动对象(重定位、设置布局X、Y)以及不同的绑定检查(boundsInLocal、BoundsParrent等),但我仍然无法做到这一点。如您所见,检测仅适用于一个对象,即使有三个对象,也只有一个对象检测碰撞。这是一些演示问题的工作代码:

  • 当前有三种类型的碰撞形状: 圆形:快速简单的碰撞形状 线段:主要作为静态形状。可以倾斜以便给之一个厚度。 凸多边形:最慢,但却为最灵活的碰撞形状。 如果你愿意,你可以在一个刚体上添加任意数量的形状。这就是为什么两种类型(形状和刚体)是分离开的。这将会给你足够的灵活性来给相同对象的不同区域提供不同的摩擦力、弹性以及回调值。 当创建不同类型的形状的时候,你将永远得到一个cpShape*指针返回。这是因

  • 问题内容: 我遇到一个问题,即一个矩形与另一个矩形发生碰撞。所以我的问题是,如何获取相交方法以检查碰撞?还是在这种情况下还有其他方法可以处理碰撞? 我正在创建一个回合制战斗游戏(类似于《最终幻想》或《龙骑传奇》),其中玩家的角色在屏幕的右侧,而敌人在屏幕的左侧。玩家和敌人轮流进攻。因此,当玩家攻击时,子画面动画会从右到左在屏幕上移动,直到停在敌人面前,进行攻击并返回到其起始坐标。玩家和敌人周围都有

  • 我遇到了一个问题,显示一个矩形与另一个矩形发生了碰撞。所以我的问题是,如何让Intersect方法检查碰撞?或者在这种情况下有其他方法来处理碰撞吗? 我正在制作一个回合制战斗游戏(类似于《最终幻想》或《龙骑兵传说》),其中玩家的角色位于屏幕的右侧,敌人位于屏幕左侧。玩家和敌人轮流攻击。因此,当玩家攻击时,精灵动画会在屏幕上从右向左移动,直到它停在敌人面前,攻击并返回到其起始坐标。玩家和敌人都有一个