快速业务通道

俯视视角游戏碰撞检测:限定移动类型和不限定移动类型

作者 凌众技术 来源 网页制作 浏览 发布时间 2012-03-08
PI/180);

point4.y = -length*Math.sin((270-(mc.rotation+dtAngle))*Math.PI/180);

hitTestPoint检测的是一个全局坐标和某剪辑的碰撞
使用mc的localToGlobal方法获得点的全局坐标
之后即可检测其与碰撞区是否碰撞。
此方法优点在于能较清楚地知道剪辑究竟哪里与外界碰撞。
例如,一台汽车与房子碰撞,我们检测到了一辆前进的车碰撞点是车的左前,那么可以在这个点播放一个“碰撞火花动画”并根据这个碰撞作出车应该被动向右转向和减速的判断。
上例给了车4个碰撞点。碰撞点越多,对这次碰撞的描述越清晰。
如果同时有两个以上的点发生碰撞,取其中点作为这次碰撞的实际发生点。
例如此方块向箭头方向运动,红点和绿点同时检测到碰撞,可以认为是此方块前方正中发生了碰撞,并作出方块直接速度反向并在前方正中播放碰撞火花动画的判定。

4.3  游戏->俯视->不限定移动->函数描述
特点:障碍物形状未必相同,但是规则的几何图形,或者能近似考虑成几何图形,注册点严谨在几何中心,总数量较少。或项目出现难以用点描述的情况。
举例:台球为代表的球类平面游戏,停车场等要求非常精准碰撞的游戏
停车场虽然用BitmapData/hitTest也可以制作,但是找不到碰撞点,不如后面方法。
此类碰撞不使用flash自带的碰撞接口,使用的是高中数学知识。

首先定义几个基础类:
Line
//线段类,属性有a,b,c,P1,P2,其中P1,P2为端点,线段上的坐标为(x,y)的点满足a*x+b*y+c==0
Box
//矩形,属性有P1,P2,P3,P4即四个顶点,get方法能得到任意两点间的线段L12,L23,L34,L41: Line
Ball
//圆形,属性有x,y,r,即圆心横、纵坐标,半径
最长应用的数学公式如下:
点之间距离公式(勾股):Math.sqrt((P1.x-P2.x)*(P1.x-P2.x)+(P1.y-P2.y)*(P1.y-P2.y))
点到直线距离公式:Math.abs(a*x+b*y+c)/Math.sqrt(a*a+b*b);
线段联立方程://求解过程略
a1*x+b1*y+c1 == 0;
a2*x+b2*y+c2 == 0;
过后补出AS3.0类

我们可以通过检测方程联立解是否在线段上判断两条线段碰撞。
可以用圆心距离是否小于半径和判断两个圆形碰撞。
可以用圆心到直线距离是否小于圆半径判断球和直线的碰撞
可以综合分析四条边分别有无碰撞,以及是否出现一个矩形包含另一个,来判定两个矩形的碰撞
上述检测方法都能将具体碰撞的位置求出

试举一个用函数碰撞优化的例子:
此图中,玩家的炮台发射了一道长度1000的直激光。敌人有3个,要检测是否命中敌人。
新建 BMP 图像.JPG
hitTestObject首先被排除掉了,理由略。

接着排除的是B

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号