目前已经完成精确到像素的任意不规则形状的碰撞检测算法 。同时也考虑将地图 信息转为二维数组以便A*自动寻径。这样在操作上用碰撞,AI上用A*,一定能给玩家带来完美的游戏 体验。
这里的碰撞检测主要依靠封装好的类PPCD(perfectPixelCollisionDetection),它的接口如下:
类PPCD:
1. 返回发生碰撞的矩形边界:
- getCollisionRect ( target1:DisplayObject,
- target2:DisplayObject,
- commonParent:DisplayObjectContainer,
-
- pixelPrecise:Boolean = true,
-
- tolerance:Number = 0 ):Rectangle
2. 返回发生碰撞的矩形边界的中心点:
- getCollisionPoint ( target1:DisplayObject,
- target2:DisplayObject,
- commonParent:DisplayObjectContainer,
-
- pixelPrecise:Boolean = true,
-
- tolerance:Number = 0 ):Point
3. 验证两个对象是否碰撞:
- isColliding ( target1:DisplayObject,
- target2:DisplayObject,
- commonParent:DisplayObjectContainer,
-
- pixelPrecise:Boolean = true,
-
- tolerance:Number = 0 ):Boolean
参数说明:
target1,target2:需要做碰撞检测的两个对象;
commonParent:两个对象所在的共同的容器;
pixelPreciese:是否精确到像素。若设置为false,则和DisplayObject.hitTestObject()工作原理相同。
tolerance:容许量,默认为0。这个数值设置开始进行碰撞检测的DisplayObject的最小alpha值。比如有个对象有阴影效果 ,其阴影的alpha值大概在20以下。那么如果在进行碰撞检测的时候不希望把阴影也包含进去,则需要将tolerance设置为20。否则另外一个物体碰到阴影也算有碰撞。
工作原理说明:
1. 找出两个对象边界矩形的交叉区域,若没有则没有发生碰撞
2. 创建一个与交叉区域同样大小的bitmap
3. 将第一个对象相交的部分以红色绘制在bitmap中
4. 将第二个对象的相交部分以白色绘制在bitmap中,BlendMode(混合模式)为DIFFERENCE。
5. 找出颜色为cyan的区域并返回其边界矩形。若没有则说明没有发生碰撞
此算法快速高效,一次检测只需要花2-3ms的时间。详细的算法参见源文件 PPCD.fla,另有2个SWF演示:
1. 拖动小球,当小球碰到不规则物体时碰撞区域的边界矩形会以绿色标记出来,同时bitmap会在左上角显示。注意物体的阴影部分没有参与碰撞检测(合理设置tolerance参数)。
http://www.namipan.com/d/5e62326 ... 44e3767b05207070000
http://www.fs2you.com/files/98e07085-49dc-11dd-b7b8-0014221f4662/
2. 纯演示动画 ,看就好。^-^
http://www.namipan.com/d/6456a50 ... cbda4e56ea196070000
http://www.fs2you.com/files/98f32f1c-49dc-11dd-991f-0014221f4662/
有了这样一个强大的类,像素级的碰撞检测就不成问题了。不过因为PPCD类返回的是边界矩形,以及人物可以在不同的方向以不同的方式碰撞,再加上人物碰到障碍物之后需要有一定的自动“滑动”的功能,碰撞检测的逻辑还是挺复杂的,下面简要介绍一下。
碰撞检测逻辑
比较长和复杂,因为碰撞情况很多,准备好@_@哦? ^^b
详细算法在5楼和6楼,帖子超长了,呵呵。
SWF效果预览:
曲线为主:
http://www.namipan.com/d/9862425 ... d6a5c4fd2276e1b0000
http://www.fs2you.com/files/98fb1375-49dc-11dd-998c-0014221f4662/
直线为主:
http://www.namipan.com/d/4205132 ... b458a61e8386d1b0000
http://www.fs2you.com/files/98fda719-49dc-11dd-9109-0014221f4662/
源文件:http://www.namipan.com/d/f960d7b ... 799d0efcb500c930100
http://www.fs2you.com/files/99003323-49dc-11dd-9d8e-0014221f4662/
目前没有发现BUG,不过还没有经过仔细调试,不敢保证完美。如果有朋友不幸遇见BUG了M我一下呀,谢谢咯~~ ^-^