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

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

时间:2016-11-27 10:10酷播
flash游戏中经常用到的就是碰撞检测与距离检测了,下面列举了几种常见的情况,一个圆距一个不规则图形的距离(原理同上,只不过探测圆的半径从检测圆的半径开始)

Flex,flash游戏中经常用到的就是碰撞检测与距离检测了,下面列举了几种常见的情况:

1,一个点与一个Sprite的碰撞(使用hitTestPoint函数即可)
  1. wall.hitTestPoint(player.x,player.y,true); 
2,两个圆的碰撞(即判断两个圆是否相交)
  1. /** 
  2.  * x1,y1,r1:第一个圆的x坐标,y坐标和半径 
  3.  * x2,y2,r2:第二个圆的x坐标,y坐标和半径 
  4.  */ 
  5. private function checkCircleCollide(x1:Number, y1:Number, r1:Number, x2:Number, y2:Number, r2:Number):Boolean{ 
  6.     var dx:Number = x1 - x2; 
  7.     var dy:Number = y1 - y2; 
  8.     var r:Number = r1 + r2; 
  9.     if (dx*dx + dy*dy < r*r) { 
  10.         return true; //cuplayer.com提示:相交 
  11.     }else{ 
  12.         return false; //cuplayer.com提示:不相交 
  13.     } 
3,两个矩形的碰撞检测(使用hitTestObject函数。这个只能用于矩形,不规则的图形这个方法也是按矩形边框来检测)
  1. sprite1.hitTestObject(sprite2); 

4,圆与一个不规则图形的碰撞检测(在圆周上取一系列的采集点,分别进行碰撞测试)

  1. /** 
  2.  * 判断一个点与目标物体是否发生碰撞 
  3.  * x,y,r测试圆的x坐标,y坐标,半径 
  4.  */ 
  5. private function checkCollide(x:Number, y:Number, r:Number, wall:Sprite):Boolean{ 
  6.     // 角度临时变量 
  7.     var rayAngle:Number; 
  8.     // 精度 precision,取这个圆周上的20个测试点 
  9.     var precision:Number=20
  10.     // 判断每个测试点是否与目标物体发生碰撞 
  11.     for (var i:Number=0; i<=precision; i++) { 
  12.         // 根据精度,算出角色元件 一圈判断点的角度 
  13.         rayAngle=2*Math.PI/precision*i; 
  14.             // cuplayer.com提示:判断点是否与墙壁碰撞 
  15.             if (wall.hitTestPoint(x+r*Math.cos(rayAngle),y+r*Math.sin(rayAngle),true)) { 
  16.                 // 发现并记录该点 
  17.                 return true; 
  18.                 break; 
  19.             } 
  20.     } 
  21.     return false; 

热门文章推荐

请稍候...

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

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