前一阵子策划提出一个需求,需要在游戏内部做一个副本,副本中分成2个队,在一个圆形的台子上进行游戏,每个队6个人,每个人相互碰撞,目的是把对方碰下去,把对方一个人碰下去得1分,自己掉下去对方得1分,这个游戏想法很直接,逻辑很简单,但是要在网络游戏中实现难度却相当大
网络游戏中玩家移动是游戏中一个很重要的部分,由于是一个“活动”的游戏,每个玩家希望跟现实中一样,周围环境有任何变化,包括其它玩家的移动都希望能够看到,起码延时不能太大(rpg游戏中通常延迟500ms是可以容忍的),那么这个是怎么实现的呢。
通常大型mmorpg中客户端都连接到服务器,所有逻辑判断以及数据都以服务器为准,移动相关逻辑也是如此。玩家的运动信息需要发给服务器,服务器收到信息以后广播给需要了解这个玩家位置的其它玩家,包括他周围玩家,他的组队队友,以及其它需要这个信息的人。这里面主要包括两块逻辑,玩家自己的移动与自己看到的别人的移动。
对于玩家自己的移动,有3种状态需要通知服务器:开始移动、移动进行、停止移动,这些信息发给服务器以后服务器以后会进行校验,如果不合理则对客户端进行校正并通知,通常是把玩家拉回到一个合理的位置,如果合理则服务器会根据需要转发给其它玩家,其它玩家收到信息以后做相应处理,下面会讲,这里主要先考虑玩家自己的移动,首先是玩家开始移动,玩家会通知服务器,我要动,其次是每隔一段时间,玩家通知服务器移动情况,包括当前位置,移动原因(走?跑?跳?飞ÿ