支持HW团队,就支付宝领取下面的红包吧!(2018年3月31前,就几毛,也会几块,可以和其他红包叠加使用),你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

小伙伴们,给大家发红包喽!人人可领,领完就能用。祝大家领取的红包金额大大大!#吱口令#长按复制此消息,打开支付宝就能领取!er1OEj73Uj

登入 注册 | 验证
| 搜索
HelloWorld论坛 : > 计算机科学、技术、教学> 编程专题> 开源免费项目> [转]碰撞检测
 
 
 
 
 
 
类别:游戏 阅读:4198 评论:0 时间:六月 13, 2013, 6:02 p.m. 关键字:

 

 来源:http://blog.codingnow.com/2006/12/collision.html
我始终认为,在 MMORPG 里采用多边形碰撞检测是件很傻的事情。当然傻不是坏事,基于多边形碰撞检测,一帧检查一次的这种做法,实现起来非常简单。很符合 kiss 原则。我们只需要一点点数学知识和一点点编程技能就能做出来了。反正 client 上,也就检查一个主角。加上可以使用简化的碰撞模型,进一步的减少运算量。

但是放在服务器上,这个运算量可不小。所以这几天我寻思着找个更好的方法出来。

据看过代码的朋友说,使用 unreal2 引擎的天堂2 当年用的打格子的方法来检测碰撞的。打格子同样是一个老土而且巨傻的方案。从 2d 的年代一直流传下来。非常非常的符合 kiss 原则 :D 同时我知道的还有我们公司已经上市的游戏产品,几乎都采用这个方案。

魔兽世界似乎不是这样做的,我想是因为 wow 的地图过大,如果把整个阻挡信息用位图保存起来,会吃掉大量的内存。即使大部分内存根本不需要访问,那被占用的地址空间也非常可观。早期 wow 的做法是,服务器不于检测。从先前的 wow 外挂那飞天遁地的能力来看是如此。

关于阻挡信息的压缩,这里就不想详述了。如果做连续地图如魔兽世界那么大,必须压缩的话。至少四叉树会比较有效。

这两天,我的想法是尝试用多层的平面来描述地图信息。每个平面上采用线段和园构成的矢量图形。(后来实际编码时,偷懒去掉了圆)

采用矢量信息,数据量比阻挡信息位图少了不只一个数量级。所以在单次运算量不增加很多的前提下,总的运算量会下降很多。具体思路是这样的:

当需检测物体有了一个速度后,从出发点发出一条射线,判断跟最近的障碍物(通常是一条线段或一个圆)相交的距离,并估算出时间。设置一个 timer 当时间时做出相应处理。

这个估算的距离不必完全精确,只需要小于等于实际距离即可。所以无论是判断线段相交还是圆相交都不必解方程精确计算。我们只需要取障碍物的外截矩形,做一个简单的碰撞检测。再可能发生碰撞时,以 x 方向和 y 方向的靠近速度来估算距离就够了。

采取这种逐步逼近的方法,障碍物比较稀疏的场合,会非常的有效。

利用这个矢量地图来做寻路,更是非常有效。这次就懒的写了 :D

相关博文 首页 上页 6 7 8 9 10 11 下页 尾页 共11条
[挂载人]初学MPEG

个人签名--------------------------------------------------------------------------------

Please Login (or Sign Up) to leave a comment