【cocos】cocos2dx 多边形碰撞
这种碰撞方法原理主要是检测多边形1的点是否在多边形2中。
-- 判断是否碰撞
1. function ContactListen:checkBox(p,pointArray)
2. p = tolua.cast(p,"CCPoint")
3. local nCross = 0;
4. local nCount = table.maxn(pointArray);
5. local cosin = 0
6. for i=0,nCount do
7. local p1 = pointArray[i];
8. p1 = tolua.cast(p1,"CCPoint")
9. local p2 = pointArray[(i+1)%(nCount+1)];
10. p2 = tolua.cast(p2,"CCPoint")
11. -- 求解 y=p.y 与 p1p2 的交点
12. local x1 = (p1.x-p.x)
13. local y1 = (p1.y-p.y)
14. local x2 = (p2.x-p.x)
15. local y2 = (p2.y-p.y)
16. local temp = (x1*x2+y1*y2)/ math.sqrt((x1*x1+y1*y1)*(x2*x2+y2*y2))
17.
18. cosin = cosin + math.deg(math.acos(temp))
19.
20. end
21.
22.
23. if cosin>=355 then
24.
25. return true;
26. end
27.
28. -- 单边交点为偶数,点在多边形之外 ---
29. return false;
30. end

浙公网安备 33010602011771号