javascript - 矩形碰撞检测

标签 javascript canvas collision-detection

我试图制作一个带有碰撞检测的小“游戏”。

问题是,在某些情况下,对象只是通过。我对原因完全视而不见。

我尝试创建自己的检测,它被注释掉了,然后我尝试了这个:

Code sample as fiddle

function rectanglesIntersect( minAx, minAy, maxAx, maxAy, minBx, minBy, maxBx, maxBy ) {
    var aLeftOfB = maxAx < minBx;
    var aRightOfB = minAx > maxBx;
    var aAboveB = minAy > maxBy;
    var aBelowB = maxAy < minBy;

    return !( aLeftOfB || aRightOfB || aAboveB || aBelowB );
}

最佳答案

幸运的是,您的矩形在移动时具有以下简化特性:

  • 它们只在 Y 方向(向上或向下)移动。
  • 它们都以每次移动 30 像素的速度移动。

因此您可以像这样确定矩形对是否会发生碰撞以及在何处发生碰撞:

  1. 移动开始时,通过测试矩形对是否垂直对齐来计算它们是否可能发生碰撞。

    rect1.x > rect2.x && rect1.x < rect2.x + rect2.width;
    
  2. 如果这对矩形朝向彼此移动,则计算这对矩形是否在 60 个垂直像素内。 60 很重要,因为每个矩形每次移动可以移动 30 像素,因此矩形对可以每次移动 30+30=60 像素相互靠近。

    var willCollideThisMove = Math.abs(rect1.y-rect2.y)<=60;
    
  3. 如果这对将发生碰撞,那么这对将在距离差的中点发生碰撞:

    var collisionY = Math.min(rect1.y,rect2.y)+Math.abs(rect1.y-rect2.y)/2;
    

对所有矩形对进行这 3 次计算。

关于javascript - 矩形碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512855/

相关文章:

javascript - 如何将转换添加到 Javascript document.getElementById ("myDIV").style.display = "none";

javascript - 解构对象作为函数参数

javascript - 最佳NodeJs MVC框架

javascript - 使用 CreateJS 按下鼠标并移动会将 chrome Canvas 降低到 30FPS

java - JavaFX 上 Canvas.snapshot() 的替代品

c# - 获取改变 Canvas 宽度的事件

javascript - 如何在 Phaser 3 中使用 Sprite 的 X 和 Y 位置来实现 "Fling"物理?

iphone - 碰撞检测

c++ - QGraphicsItem 像素完美碰撞检测器

javascript - 使用 ng-table Angular 计算列的总和