快速业务通道

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

作者 凌众技术 来源 网页制作 浏览 发布时间 2012-03-08
高度+玩家速度x2 即可
此方法效率很高,能立刻检测玩家是否碰撞了地图障碍,缺点也比较明显,就是不知道玩家的哪一点碰撞了地图障碍。一个赛车游戏如果用这个的话,只能做成“碰到墙立刻爆炸”或“碰到墙立刻减速为0”再或“碰到墙立刻速度变成相反的”等很绝对的判定。
BitmapData/hitTest的检测比较万能。
前面提到的所有碰撞都可以用它来检测,考虑缓存大小和效率问题,如果运动物体很多的话不能完全依赖。

4.2  游戏->俯视->不限定移动->点描述
比起4方向移动的点描述,360度点描述相对需要计算,必须大量使用三角函数
(三角函数是常规解决方案。个别高手使用矩阵或者向量乘法表示角度,尤其是向量乘法表示角度能减少计算量,提高速度)
s1.jpg

设上图剪辑为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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

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号