【CSON原創(chuàng)】HTML5游戲框架cnGameJS開發(fā)實(shí)錄(碰撞檢測(cè)模塊篇)
本模塊的碰撞檢查只局限于點(diǎn)與矩形,(平行的)矩形與矩形,點(diǎn)與圓形,圓形與圓形之間的檢測(cè),因此該模塊也很簡(jiǎn)單,直接結(jié)合代碼來看看:
點(diǎn)與矩形:
/**
*點(diǎn)和矩形間的碰撞
**/
this.col_Point_Rect=function(pointX,pointY,rectObj){
return (pointX>rectObj.x&&pointX<rectObj.right||pointY>rectObj.y&&pointY<rectObj.bottom);
}
當(dāng)一個(gè)點(diǎn)在矩形內(nèi)時(shí),我們認(rèn)為它們產(chǎn)生了碰撞。
矩形與矩形:
/**
*矩形和矩形間的碰撞
**/
this.col_Between_Rects=function(rectObjA,rectObjB){
return ((rectObjA.right>rectObjB.x&&rectObjA.right<rectObjB.right||rectObjA.x>rectObjB.x&&rectObjA.x<rectObjB.right)&&(rectObjA.bottom>rectObjB.y&&rectObjA.bottom<rectObjB.bottom||rectObjA.y<rectObjB.bottom&&rectObjA.bottom>rectObjB.y));
}
簡(jiǎn)而言之,矩形的碰撞取決于矩形四個(gè)點(diǎn)相對(duì)于另一個(gè)矩形的位置。在后續(xù)文章的sprite對(duì)象中,我們通常通過獲取sprite對(duì)象的矩形來檢測(cè)對(duì)象和其他對(duì)象的碰撞。因此矩形和矩形的碰撞也是用得最多的碰撞。
/**
*點(diǎn)和圓形間的碰撞
**/
this.col_Point_Circle=function(pointX,pointY,circleObj){
return(Math.pow((pointX-circleObj.x),2)+Math.pow((pointY-circleObj.y),2)<Math.pow(circleObj.r,2));
}
點(diǎn)在圓形內(nèi)則認(rèn)為該點(diǎn)和圓形產(chǎn)生碰撞。
圓形和圓形:
/**
*圓形和圓形間的碰撞
**/
this.col_between_Circles=function(circleObjA,circleObjB){
return(Math.pow((circleObjA.x-circleObjB.x),2)+Math.pow((circleObjA.y-circleObjB.y),2)<Math.pow((circleObjA.r+circleObjB).r,2));
}
圓形和圓形的碰撞取決于它們圓心距離和它們半徑大小之和的比較。
浙公網(wǎng)安備 33010602011771號(hào)