关于网络游戏的碰撞检测问题
以现在的机器配置来说服务器跑地图应该是不可能的,现在服务器应该只是数据传输,由于现在外挂比较厉害,服务器还要加上验证。
可是现在问题就出来了,碰撞检测和是否击中对手是必须要一台机器来完成,而不能由每个客户端来完成,因为这样不止因为安全问题还因为同步问题,两个人同时打一个怪物时由于网络有延迟会造成两个人都会以为是自己打死的怪物,所以必须由服务器来做碰撞或者击中检测。
矛盾:服务器不跑地图怎么和地图中的一些物体做碰撞检测(比如说树、房子、墙等)?
------------------------------------------
还有一个问题,现在一些游戏采用地图分格来检测碰撞,比如说当前这个格子有人或者怪物或者什么其他东西,就把当前格子标记为有东西(类似于true或者false)。可是我觉得这样的技术现在根本不可行啊!为什么呢?问题就在于你这个格子到底要分多大!
多大面积是一个格子?恐怕要取整个游戏中能影响碰撞检验的最小面积的物体。咱们现在简单一点,就当一个人所占的面积最小,也就是按照一个人为单位分一个格子,那么地图有多少格子呢?也就是说 (Map.Width/People.Width)*(Map.Height/People.Height) 个,一般来说地图长宽和相等,格子也是正方形,也就是 (Map.Width/People.Width) 的平方个。大家看看像天堂2这个游戏,地图有多么大,和人所占的格的比例有多大,这是多么大的数据量啊!!!光是数据量还不是问题,所有格子的检索也是非常耗时的,数据量太大,再加上网络游戏至少有一千人在线,所以这个问题更麻烦了。
有什么好的解决方法吗???
http://www.gameres.com/bbs/showthread.asp?threadid=5908