矩形碰撞检测

奇森

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

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

我尝试创建自己的检测,将其注释掉,然后尝试以下操作:

代码样本作为小提琴

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方向(向上或向下)移动。
  • 它们的移动幅度均为30px。

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

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

    rect1.x > rect2.x && rect1.x < rect2.x + rect2.width;
    
  2. 如果这对矩形彼此相向,请计算该对矩形是否在彼此的60个垂直像素之内。60很重要,因为每个rect每行可以移动30像素,因此rect对可以彼此相隔30 + 30 = 60px。

    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;
    

对所有rect对进行这3次计算。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章