欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

cocos2d-x 判断圆形是否与矩形发生物理碰撞

程序员文章站 2024-03-16 14:34:40
...

台球游戏做到的,直接给出代码

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