【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

posted @ 2015-07-03 19:01  colin_chan  阅读(717)  评论(0)    收藏  举报