如图所示,不使用物理系统去检测两个物体是否碰撞的效果。
注意:两个物体如果一直相交,在Update中处理的时候会一直输出,在实际使用时需要注意相交时的处理。
直接上代码:
检测碰撞使用的是两个节点,节点有自己的宽高和位置。
/**
* 判断两个矩形是否碰撞(节点需要有size)
* @param node1 碰撞的节点A
* @param node2 碰撞的节点B
* @returns 是否碰撞
*/
public rectOverlapWithRect(node1: cc.Node, node2: cc.Node): boolean {
let halfWidthA = node1.width / 2;
let halfHeightA = node1.height / 2;
let xMinA = node1.x - halfWidthA;
let xMaxA = node1.x + halfWidthA;
let yMinA = node1.y - halfHeightA;
let yMaxA = node1.y + halfHeightA;
let halfWidthB = node2.width / 2;
let halfHeightB = node2.width / 2;
let xMinB = node2.x - halfWidthB;
let xMaxB = node2.x + halfWidthB;
let yMinB = node2.y - halfHeightB;
let yMaxB = node2.y + halfHeightB;
return xMinA <= xMaxB && xMaxA >= xMinB && yMinA <= yMaxB && yMaxA >= yMinB;
}