MMO碰撞检测,战斗,地图行走以及寻路问题

1. 碰撞检测

碰撞应该在服务端做,否则客户端就可以作弊了,但是服务端没有场景的几何信息,怎么做碰撞呢,方法是使用一张碰撞图,可以由美术生成,把接受碰撞的物体绘制成黑色,其他地方绘制成白色,对于边界和通道可以由美工在上面手动刷。

碰撞图生成之后,当客户端请求行走的时候,根据当前x, z位置和下一个x, z位置,可以计算出在碰撞图中的相应坐标,然后判断它们之间是否有黑色的像素,进而判断出是否会碰撞,然后给客户端作出响应。

2. 地图行走: 即如何保证人物行走时总是在地形的上方

保证人物在地形上方的方法是向-y方向投射一条射线,进而计算出人物当前位置的y坐标,然后更新人物的位置。这种计算最好在客户端做,因为服务器不能保存地形信息,但这样有一个问题,客户端可以提供假的y坐标,这样可能会造成问题,解决办法是,在服务端为每个地图保存一张y坐标图,它可以是不太精确的,用来防止客户端作弊。

对于那种可以掉下去的地图,可以在服务端模拟这种简单的物理,即给角色一个初速度,然后受重力作用。y坐标是逐步更新的。

3. 关于战斗

物理攻击: 当客户端请求物理攻击时,根据角色的位置和朝向判断与攻击目标的距离,若距离在攻击范围内,则允许攻击,服务端通知客户端播放攻击动画,当播放到某个点时【打到目标身上时】,通知服务端,服务端修改相应的状态,同步到客户端。

魔法攻击: 对于可穿墙的魔法,只需判断攻击者与目标的距离即可;不可穿墙的魔法,则需要使用碰撞图判断中间是否有障碍物,进而确定攻击是否有效。若有效,则通知客户端播放魔法动画,当技能打到目标身上时,通知服务端,服务端修改状态并同步到客户端。

4. 关于寻路

仅在服务端寻路:服务端根据碰撞图生成路线,然后更新位置同步到客户端。这种方式寻路有点耗!毕竟寻路也是一个经常用的功能,而且有那么多客户端,怕服务端吃不消。

服务端和客户端配合寻路:客户端生成路线,服务端监督客户端的移动,感觉这种方式比较好:)。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值