俯视视角游戏碰撞检测:限定移动类型和不限定移动类型
作者 凌众技术
来源 网页制作
浏览
发布时间 2012-03-08
高度+玩家速度x2 即可 此方法效率很高,能立刻检测玩家是否碰撞了地图障碍,缺点也比较明显,就是不知道玩家的哪一点碰撞了地图障碍。一个赛车游戏如果用这个的话,只能做成“碰到墙立刻爆炸”或“碰到墙立刻减速为0”再或“碰到墙立刻速度变成相反的”等很绝对的判定。 BitmapData/hitTest的检测比较万能。 前面提到的所有碰撞都可以用它来检测,考虑缓存大小和效率问题,如果运动物体很多的话不能完全依赖。 4.2 游戏->俯视->不限定移动->点描述 比起4方向移动的点描述,360度点描述相对需要计算,必须大量使用三角函数 (三角函数是常规解决方案。个别高手使用矩阵或者向量乘法表示角度,尤其是向量乘法表示角度能减少计算量,提高速度) 设上图剪辑为mc。 mc的箭头指向为mc注册时的y轴方向,现在mc右旋转了rotation度 设剪辑注册时的宽度(即短边长度)为og_width; 设剪辑注册时的高度(即长边长度)为og_height; 如果不使用极坐标,碰撞点相对mc的坐标可以通过三角函数算出 本人推荐熟练的程序员自行制作极坐标类,在360度移动的俯视视角游戏中作用很大 var dtAngle:Number = Math.atan(og_width/og_height)//单位夹角 var length:Number = Math.sqrt//对角线长度的一半(og_width*og_width+og_height*og_height)/2 var point1: Point = new Point(); point1.x = length*Math.cos((90-(mc.rotation-dtAngle))*Math.PI/180); point1.y = -length*Math.sin((90-(mc.rotation-dtAngle))*Math.PI/180); //因为flash坐标轴y轴与数学y轴上下相反,本人习惯保留纵坐标的符号,而不是将其带入三角函数。可根据个人代码风格修改。 var point2: Point = new Point(); point2.x = length*Math.cos((90-(mc.rotation+dtAngle))*Math.PI/180); point2.y = -length*Math.sin((90-(mc.rotation+dtAngle))*Math.PI/180); var point3: Point = new Point(); point3.x = length*Math.cos((270-(mc.rotation-dtAngle))*Math.PI/180); point3.y = -length*Math.sin((270-(mc.rotation-dtAngle))*Math.PI/180); var point4: Point = new Point(); point4.x = length*Math.cos((270-(mc.rotation+dtAngle))*Math. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于俯视视角游戏碰撞检测:限定移动类型和不限定移动类型的所有评论