[AS3]as3下做碰撞检测的源代码范例(2)
5,一个点距一个不规则图形的距离 (以这点为圆心,半径从1开始逐步增加画圆,每个圆上取一定量的采集点与目标区域进行碰撞检测,碰撞了说明距离就是这个半径了。这个半径需要设个上限,要不然的话影响性能。) /**
5,一个点距一个不规则图形的距离
(以这点为圆心,半径从1开始逐步增加画圆,每个圆上取一定量的采集点与目标区域进行碰撞检测,碰撞了说明距离就是这个半径了。这个半径需要设个上限,要不然的话影响性能。)
(以这点为圆心,半径从1开始逐步增加画圆,每个圆上取一定量的采集点与目标区域进行碰撞检测,碰撞了说明距离就是这个半径了。这个半径需要设个上限,要不然的话影响性能。)
- /**
- * 计算一个点与目标物体的距离
- * x,y测试点的x坐标,y坐标
- */
- private function calculateDistance(x:Number, y:Number, wall:Sprite):Number{
- if(wall.hitTestPoint(x,y,true)){
- return 0;
- }
- // 角度临时变量
- var rayAngle:Number;
- // 精度 precision,取这个圆周上的20个测试点
- var precision:Number=20;
- // 判断每个测试点是否与目标物体发生碰撞
- // 半径扩大精度
- var rayStep:Number=1;
- // 最远探测距离
- var minDistance:Number=50;
- for (var i:Number=0; i<=precision; i++) {
- // 根据精度,算出角色元件 一圈判断点的角度
- rayAngle=2*Math.PI/precision*i;
- // 逐步向外探测
- for (var j:Number=1; j<=51; j+=rayStep) {
- // 判断点是否与墙壁碰撞
- if (wall.hitTestPoint(x+j*Math.cos(rayAngle),y+j*Math.sin(rayAngle),true)) {
- // cuplayer.com发现并记录该点
- minDistance=Math.min(j,minDistance);
- break;
- }
- }
- }
- return minDistance;
- }
6,一个圆距一个不规则图形的距离(原理同上,只不过探测圆的半径从检测圆的半径开始)
- /**
- * 计算一个圆 与目标物体的距离
- * x,y,r测试圆 的x坐标,y坐标,半径
- */
- private function calculateDistance(x:Number, y:Number, r:Number, wall:Sprite):Number{
- // 角度临时变量
- var rayAngle:Number;
- // 精度 precision,取这个圆周上的20个测试点
- var precision:Number=20;
- // 判断每个测试点是否与目标物体发生碰撞
- // 半径扩大精度
- var rayStep:Number=1;
- // 最远探测距离
- var minDistance:Number=50;
- for (var i:Number=0; i<=precision; i++) {
- // 根据精度,算出角色元件 一圈判断点的角度
- rayAngle=2*Math.PI/precision*i;
- // 逐步向外探测
- for (var j:Number=r; j<=r+50; j+=rayStep) {
- // 判断点是否与墙壁碰撞
- if (wall.hitTestPoint(x+j*Math.cos(rayAngle),y+j*Math.sin(rayAngle),true)) {
- // 发现并记录该点
- minDistance=Math.min(j-r,minDistance);
- break;
- }
- }
- }
- return minDistance;
- }
来源:http://www.hangge.com/blog/cache/detail_452.html
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...