我试图用HTML画布和JavaScript制作一个非常简单的游戏。我发现了许多关于检测画布上基本形状(如矩形和圆)的碰撞的教程和问题。但我想知道是否有可能检测出一个复杂形状(由许多基本形状组成的形状)是否与另一个形状碰撞,或者即使两个复杂形状正在碰撞。如果是这样,怎么做?提前谢谢!
一般算法不会提供比基于每种形状类型知识的算法更好的解决方案。
通常,对于复杂(即复合)形状,您通常会尝试执行步骤#1和“提前退出”测试。出于优化原因,您通常会尝试在过程中尽早消除误报。
简单的步骤#1是测试每个化合物形状的“边界框”上的碰撞。如果边界框不重叠,那么您可以提前退出并假设没有冲突,因为复合形状无法碰撞(请参阅 https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169)
如果边界框测试无法提前消除,则需要使用最适合形状的算法(圆-圆、圆-矩形等)依次测试每个子形状,将最“昂贵”的测试留给最后一个类似多边形的多边形。
您可能还想看看这个问题,如何确定两个凸多边形是否相交?
我想做一个游戏,有每一个水平加载从一个图像。我想在Photoshop中把整个关卡画出来,然后把它设置为背景并允许玩家走过去。我想要另一个看不见的图像超过顶部,这将是黑色的所有地方,我想要碰撞。 我不想使用瓷砖的原因,这是更容易与矩形碰撞和诸如此类,因为将有复杂的角,并不是所有将是矩形。 这是一个好主意吗?有没有可能轻松做到?这将是一个巨大的CPU拥有者还是有更好的方法做到这一点?
当前有三种类型的碰撞形状: 圆形:快速简单的碰撞形状 线段:主要作为静态形状。可以倾斜以便给之一个厚度。 凸多边形:最慢,但却为最灵活的碰撞形状。 如果你愿意,你可以在一个刚体上添加任意数量的形状。这就是为什么两种类型(形状和刚体)是分离开的。这将会给你足够的灵活性来给相同对象的不同区域提供不同的摩擦力、弹性以及回调值。 当创建不同类型的形状的时候,你将永远得到一个cpShape*指针返回。这是因
我继承了一个模拟程序来扩展新功能。原文是使用AWT图形库编写的小程序。在添加新功能之前,我想使程序适应桌面并使用JavaFX而不是AWT。 模拟每秒绘制数百或数千个对象数十次,然后擦除它们并在新位置重新绘制它们,从而有效地对它们进行动画处理。我正在为UI的该部分使用Canvas对象。擦除是通过用背景色重新绘制对象来完成的。然而,我所看到的是擦除对象是不完整的。不过,一种“光环”被抛在了脑后。 下面
我目前正在制作松软的小鸟,我把它从矩形改成了我自己的图像等等。我似乎不知道该怎么做,当鸟(不规则形状)撞到矩形时,它就死了。当碰撞的形状很奇怪时,我不知道如何编写碰撞代码。这是一张图片。我把鸟画成这样。 附上游戏的图片,鸟,和代码。
我知道如何检查一个圆是否要与一个正方形相撞,我知道如何检测一个正方形是否要与一个正方形相撞,但是如果一个多边形要与一个正方形相撞,我该如何检测呢? 或者更好的是,当一个多边形将要与另一个多边形碰撞时。 或者更好的是,当由非直线组成的形状与另一个类似的形状(多边形或圆形/矩形)发生冲突时 有什么方法可以得到一个图形可能占用的像素和另一个图形可能占用的像素,并检查它们是否相同? 我希望有一些解决方案不
我正在尝试做一些碰撞检测。对于这个测试,我使用了一个简单的矩形,并检查它们的,以确定它们是否碰撞。尽管检测没有如预期那样工作。我尝试过使用不同的方法来移动对象(重定位、设置布局X、Y)以及不同的绑定检查(boundsInLocal、BoundsParrent等),但我仍然无法做到这一点。如您所见,检测仅适用于一个对象,即使有三个对象,也只有一个对象检测碰撞。这是一些演示问题的工作代码: