[AS3]as3下做碰撞检测的源代码范例
flash游戏中经常用到的就是碰撞检测与距离检测了,下面列举了几种常见的情况,一个圆距一个不规则图形的距离(原理同上,只不过探测圆的半径从检测圆的半径开始)
Flex,flash游戏中经常用到的就是碰撞检测与距离检测了,下面列举了几种常见的情况:
1,一个点与一个Sprite的碰撞(使用hitTestPoint函数即可)
- wall.hitTestPoint(player.x,player.y,true);
2,两个圆的碰撞(即判断两个圆是否相交)
- /**
- * x1,y1,r1:第一个圆的x坐标,y坐标和半径
- * x2,y2,r2:第二个圆的x坐标,y坐标和半径
- */
- private function checkCircleCollide(x1:Number, y1:Number, r1:Number, x2:Number, y2:Number, r2:Number):Boolean{
- var dx:Number = x1 - x2;
- var dy:Number = y1 - y2;
- var r:Number = r1 + r2;
- if (dx*dx + dy*dy < r*r) {
- return true; //cuplayer.com提示:相交
- }else{
- return false; //cuplayer.com提示:不相交
- }
- }
3,两个矩形的碰撞检测(使用hitTestObject函数。这个只能用于矩形,不规则的图形这个方法也是按矩形边框来检测)
- sprite1.hitTestObject(sprite2);
4,圆与一个不规则图形的碰撞检测(在圆周上取一系列的采集点,分别进行碰撞测试)
- /**
- * 判断一个点与目标物体是否发生碰撞
- * x,y,r测试圆的x坐标,y坐标,半径
- */
- private function checkCollide(x:Number, y:Number, r:Number, wall:Sprite):Boolean{
- // 角度临时变量
- var rayAngle:Number;
- // 精度 precision,取这个圆周上的20个测试点
- var precision:Number=20;
- // 判断每个测试点是否与目标物体发生碰撞
- for (var i:Number=0; i<=precision; i++) {
- // 根据精度,算出角色元件 一圈判断点的角度
- rayAngle=2*Math.PI/precision*i;
- // cuplayer.com提示:判断点是否与墙壁碰撞
- if (wall.hitTestPoint(x+r*Math.cos(rayAngle),y+r*Math.sin(rayAngle),true)) {
- // 发现并记录该点
- return true;
- break;
- }
- }
- return false;
- }
热门文章推荐
- [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示例
请稍候...