·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3下做碰撞检测的源代码范例(2)

时间:2016-11-27 10:10酷播
5,一个点距一个不规则图形的距离 (以这点为圆心,半径从1开始逐步增加画圆,每个圆上取一定量的采集点与目标区域进行碰撞检测,碰撞了说明距离就是这个半径了。这个半径需要设个上限,要不然的话影响性能。) /**

5,一个点距一个不规则图形的距离
(以这点为圆心,半径从1开始逐步增加画圆,每个圆上取一定量的采集点与目标区域进行碰撞检测,碰撞了说明距离就是这个半径了。这个半径需要设个上限,要不然的话影响性能。)
  1. /** 
  2.  * 计算一个点与目标物体的距离 
  3.  * x,y测试点的x坐标,y坐标 
  4.  */ 
  5. private function calculateDistance(x:Number, y:Number, wall:Sprite):Number{ 
  6.     if(wall.hitTestPoint(x,y,true)){ 
  7.         return 0; 
  8.     } 
  9.       
  10.     // 角度临时变量 
  11.     var rayAngle:Number; 
  12.     // 精度 precision,取这个圆周上的20个测试点 
  13.     var precision:Number=20
  14.     // 判断每个测试点是否与目标物体发生碰撞 
  15.     // 半径扩大精度 
  16.     var rayStep:Number=1
  17.     // 最远探测距离 
  18.     var minDistance:Number=50
  19.     for (var i:Number=0; i<=precision; i++) { 
  20.         // 根据精度,算出角色元件 一圈判断点的角度 
  21.         rayAngle=2*Math.PI/precision*i; 
  22.         // 逐步向外探测 
  23.         for (var j:Number=1; j<=51; j+=rayStep) { 
  24.             // 判断点是否与墙壁碰撞 
  25.             if (wall.hitTestPoint(x+j*Math.cos(rayAngle),y+j*Math.sin(rayAngle),true)) { 
  26.                 // cuplayer.com发现并记录该点 
  27.                 minDistance=Math.min(j,minDistance); 
  28.                 break; 
  29.             } 
  30.         } 
  31.     } 
  32.     return minDistance; 

6,一个圆距一个不规则图形的距离(原理同上,只不过探测圆的半径从检测圆的半径开始)

  1. /** 
  2.  * 计算一个圆  与目标物体的距离 
  3.  * x,y,r测试圆 的x坐标,y坐标,半径 
  4.  */ 
  5. private function calculateDistance(x:Number, y:Number, r:Number, wall:Sprite):Number{ 
  6.     // 角度临时变量 
  7.     var rayAngle:Number; 
  8.     // 精度 precision,取这个圆周上的20个测试点 
  9.     var precision:Number=20
  10.     // 判断每个测试点是否与目标物体发生碰撞 
  11.     // 半径扩大精度 
  12.     var rayStep:Number=1
  13.     // 最远探测距离 
  14.     var minDistance:Number=50
  15.     for (var i:Number=0; i<=precision; i++) { 
  16.         // 根据精度,算出角色元件 一圈判断点的角度 
  17.         rayAngle=2*Math.PI/precision*i; 
  18.         // 逐步向外探测 
  19.         for (var j:Number=r; j<=r+50; j+=rayStep) { 
  20.             // 判断点是否与墙壁碰撞 
  21.             if (wall.hitTestPoint(x+j*Math.cos(rayAngle),y+j*Math.sin(rayAngle),true)) { 
  22.                 // 发现并记录该点 
  23.                 minDistance=Math.min(j-r,minDistance); 
  24.                 break; 
  25.             } 
  26.         } 
  27.     } 
  28.     return minDistance; 

来源:http://www.hangge.com/blog/cache/detail_452.html

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器