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

图像层和形状之间的碰撞检测

卢磊
2023-03-14

我如何有效地检测图像层和生成的形状之间的冲突?

我需要一种快速而全面的方法来检测可旋转图像层和生成的形状之间的碰撞。

到目前为止,我只是将图像分割成一系列包含大多数像素的圆圈,然后根据其他形状测试每个圆圈。为了提高性能,我在每个结构周围创建了周界圆,只测试这些较大的圆,直到两个结构足够接近可以碰撞为止。

真正的问题是,很难将一个可旋转的矩形碰撞成这些图像结构之一。用圆形填充矩形似乎也没有效率。更不用说我得到的组合爆炸使循环变得非常复杂和糟糕。

有谁知道处理这种类型的碰撞的更好方法吗?我用爪哇语,蟒蛇和C语言写作。我也愿意使用C。

共有1个答案

郦翰学
2023-03-14

通常,球体碰撞只是真实碰撞测试的过滤器

您可以:

  • 决定将碰撞限制在这一点上,例如,如果这是一个游戏。
  • 实现真正的碰撞并进行完整的数学运算。您基本上是将两个矩形的旋转边相交(16例)。将两条边相交,就像它们是线一样,只有一个交点(除非它们是平行的),如果该点在段内,则会发生碰撞。

为了限制复杂性,您可以使用四叉树/八叉树。将您的空间分成四个矩形,然后将这些矩形分成四个等等……直到它们太小而无法包含对象或为空。将可碰撞对象放入包含它们的树的最特定部分。两个对象只有在同一个子矩形中或一个在另一个的任何父矩形中才能碰撞。

不确定这有帮助,但它们是想法。

 类似资料:
  • 在我的自上而下游戏中,当我的玩家通过婴儿床时,我该如何让他发生碰撞?我用的是交叉矩形。 这是我的密码 更新方法 在渲染方法中 这是完整的代码 谁能告诉我矩形碰撞检测的正确实现是什么?没有重叠,我是这个框架的新手。致谢和预付款:)

  • 问题内容: 我正在写的游戏中有两个角色,玩家和敌人。定义如下: 然后用: 我可以使用键盘来移动player(),但是在尝试检测两者之间的碰撞时我很茫然。很多人说过要使用Rectangles,但是作为一个初学者,我看不到如何将其链接到现有代码中。谁能为我提供一些建议? 问题答案: 我认为您的问题是您没有为球员和敌人使用好的OO设计。创建两个类: 您的播放器应具有X,Y,Width和Height变量。

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

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

  • 我知道如何检查一个圆是否要与一个正方形相撞,我知道如何检测一个正方形是否要与一个正方形相撞,但是如果一个多边形要与一个正方形相撞,我该如何检测呢? 或者更好的是,当一个多边形将要与另一个多边形碰撞时。 或者更好的是,当由非直线组成的形状与另一个类似的形状(多边形或圆形/矩形)发生冲突时 有什么方法可以得到一个图形可能占用的像素和另一个图形可能占用的像素,并检查它们是否相同? 我希望有一些解决方案不

  • 我已经在这里呆了2-3周了,我仍然无法进行适当的碰撞检测。我用矩形创建了一个迷宫。我希望我的对象(在矩形中)每当我的对象与任何墙壁碰撞时停止,并能够移动到任何地方(或滑下墙壁)。我的墙壁(矩形)具有负坐标,如下所示: 我目前正在使用SO中发现的重叠方法。以下是我的CollisionManager类中的方法: 我有一个功能可以保存对象所做的所有位置移动。因此,当发生碰撞时,对象会恢复到最后一次移动之