cocos2d-x 判斷圓形是否與矩形發生物理碰撞
阿新 • • 發佈:2019-01-23
檯球遊戲做到的,直接給出程式碼
function help.twoDistance(X1,Y1,X2,Y2) return math.pow((math.pow((X1 - X2), 2) + math.pow((Y1 - Y2), 2)), 0.5) end function help.rot(x1,y1,x2,y2) local value = (y1-y2)/(x1-x2) return math.atan(value)*180/math.pi end function help.computeCollision(w, h, r, newrx, newry) local dx = math.min(newrx, w * 0.5) local dx1 = math.max(dx, -w * 0.5) local dy = math.min(newry, h * 0.5) local dy1 = math.max(dy, -h * 0.5) return (dx1 - newrx) * (dx1 - newrx) + (dy1 - newry) * (dy1 - newry) <= r * r end function help.getNewRx_Ry(x1,y1,x2,y2,rotation) local json = {} local distance = help.twoDistance(x1,y1,x2,y2) --計算最新角度(與X軸的角度),同數學X Y軸 local newrot = help.rot(x1,y1,x2,y2) - rotation local newRx = math.cos(newrot/180*math.pi) * distance local newRy = math.sin(newrot/180*math.pi) * distance json.newRx = newRx json.newRy = newRy return json end
help.getNewRx_Ry(x1,y1,x2,y2,rotation) 的值是:
x1,y1:矩形的左下角的座標(統一為同一節點下的座標)
x2,y2:圓形的座標(統一為同一節點下的座標)
rotation:矩形旋轉的角度,與X軸正方向的夾角,不是cocos引擎的角度
help.computeCollision(w, h, r, newrx, newry) 的值是:
w, h:矩形的長寬
r:圓形的半徑
newrx,newry:help.getNewRx_Ry 獲得的 json 元表的 json.newRx , 和 json.newRy