当前位置: 首页 > 面试题库 >

我在屏幕上绘制了两个正方形,如何检测两个对象边缘的碰撞?

韩琛
2023-03-14
问题内容

现在,我可以比较X和Y以检查是否发生碰撞,但这仅是两个对象在完全相同的X和Y位置彼此正确通过时。我需要更精确地检查碰撞,以检查是否有刮痕,因为缺少更好的术语。我有X,Y,X和Y比例的变量以及X和Y的速度。非常感谢您的帮助:D

编辑:正方形!


问题答案:

如果您的正方形无法旋转,这很简单:说double r是每个边的长度Point p1,一个正方形的中心,另一个正方形的中心p2。然后:

if (Math.abs(p1.x - p2.x) < r && Math.abs(p1.y - p2.y) < r) {
    // Collision
}

更复杂的情况是正方形是否可以旋转。在这种情况下:将对象的每条边视为一条几何线(如果知道角的坐标,则可以轻松地计算每条线的方程式)。

接下来,找到每对线的汇合点(每个汇合点从一个正方形到另一个,彼此相交),并测试该点是否在其中一个正方形内。如果这些比较之一返回true,则发生冲突。



 类似资料:
  • 我一直试图在iOS 7版SpriteKit中找到最有效的方法来获得每像素碰撞(然而,iOS 8版SpriteKit支持此功能)。当然,我想用一个方框或圆圈来表示精灵的物理身体,但不幸的是,游戏的本质要求每像素碰撞。 我知道我可以手动绘制精灵周围的CGPath,但我正在努力为自己节省一些时间/创建一种长期使用的方法/学习新的东西。由于精灵的图像是在alpha背景(png文件)上绘制的,我想知道使用边

  • 我试图绘制两个定义大小的正方形,一个位于一行中的另一个旁边,使用JPanel的画图组件()方法。到目前为止,我尝试的是: 1.边框布局 我试图在JPanel的一个单独的子类中绘制每个正方形,然后将这些JPanel添加到JFrame中。 结果:正方形被压扁到JPanel的相对两侧:高度与预期一致,但宽度最小。 2.流程布局 我试图将我的带有绘制方块的“子”JPanels添加到“父”JPane,然后调

  • 我正在构建一个自上而下的2D滚动使用java swing与经典游戏Bomberman非常相似的游戏,玩家可以在所有4个基本方向移动角色。 所有的游戏对象都有实例变量,其中包含它们在JPanel上呈现的(x,y)坐标,它们也有用于它们在最后一帧中呈现的前一个(x,y)坐标的实例变量。我的碰撞检测算法本质上是在每次刷新屏幕时检查播放器对象是否与网格中的墙相交--这可以在下面的代码中看到: restor

  • 我有经度和纬度的地理坐标,比如西北和东南经度/纬度。所以,当我得到它们的时候,我把它们转换成公制。因此,这里我得到了我的第一个西北和东南坐标的矩形,然后我有了北,南,西,东坐标的相同公制中的边界矩形。我需要检查这两个直角相交的边,我写的是: 我不确定我做得对不对?我的要求是,如果第二个矩形的边界与第一个矩形的边界相交,那么第二个必须留在左边。否则,过滤。

  • 我正在做一个游戏,在这个游戏中,玩家必须用一个碗来接住掉落的物品。我有一些列表中项目的图像和一个用来捕捉项目的碗的图像。这些项目会持续下降,如果它们到达边界(底部边缘),则会重置到屏幕顶部。我完成了这个逻辑,允许物品落下,但我不知道如何检测碗和物品之间的碰撞。 我的代码:

  • 我遵循Mozilla游戏开发教程,并在HTML5 Canvas和JS中制作了一个简单的突破游戏。 然而,我想放大画布,因为它有点小,所以我尝试了800x600画布。然后,我注意到对于这个新的画布大小来说,球有点慢。 最初在mozilla教程中,球的速度是2。我尝试使用3。因此,问题就来了。。。 当我使用每秒刷新60倍的requestAnimationFrame时,我们可以说我的球将每秒移动3 x