关于网络游戏的碰撞检测问题

IONPhantom 2004-04-05 12:26:06
以现在的机器配置来说服务器跑地图应该是不可能的,现在服务器应该只是数据传输,由于现在外挂比较厉害,服务器还要加上验证。

可是现在问题就出来了,碰撞检测和是否击中对手是必须要一台机器来完成,而不能由每个客户端来完成,因为这样不止因为安全问题还因为同步问题,两个人同时打一个怪物时由于网络有延迟会造成两个人都会以为是自己打死的怪物,所以必须由服务器来做碰撞或者击中检测。

矛盾:服务器不跑地图怎么和地图中的一些物体做碰撞检测(比如说树、房子、墙等)?

------------------------------------------

还有一个问题,现在一些游戏采用地图分格来检测碰撞,比如说当前这个格子有人或者怪物或者什么其他东西,就把当前格子标记为有东西(类似于true或者false)。可是我觉得这样的技术现在根本不可行啊!为什么呢?问题就在于你这个格子到底要分多大!

多大面积是一个格子?恐怕要取整个游戏中能影响碰撞检验的最小面积的物体。咱们现在简单一点,就当一个人所占的面积最小,也就是按照一个人为单位分一个格子,那么地图有多少格子呢?也就是说 (Map.Width/People.Width)*(Map.Height/People.Height) 个,一般来说地图长宽和相等,格子也是正方形,也就是 (Map.Width/People.Width) 的平方个。大家看看像天堂2这个游戏,地图有多么大,和人所占的格的比例有多大,这是多么大的数据量啊!!!光是数据量还不是问题,所有格子的检索也是非常耗时的,数据量太大,再加上网络游戏至少有一千人在线,所以这个问题更麻烦了。


有什么好的解决方法吗???



http://www.gameres.com/bbs/showthread.asp?threadid=5908
...全文
391 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
IONPhantom 2004-04-06
  • 打赏
  • 举报
回复
碰撞检验在单机做这样就会给外挂以可乘之机啊
寻开心 2004-04-05
  • 打赏
  • 举报
回复
碰撞检测这种事情还是在客户端进行的
但是决定怪物的生死的状况是在服务器进行的
因为怪物的生命数值必须通过服务器来确定
在客户端击中怪物的时候,发送杀伤力给服务器,服务器处理后把结果公布。
至于多打一的时候,就是要看谁的速度快了。
当你打中一个已经死亡的怪物的时候问题也不大,服务器处理的时候发送怪物死亡信息就可以了。
至于分数,可以按照怪物被杀伤的比例进行分配,最后一击的多给奖励分就可以了,谁是最后杀死鬼物的是服务器决定的。

网格检测也是在本地进行的,格子大小是根据场景和游戏类型确定
服务器公布各个物体在地图上的那个格子上,处理由客户端决定。
能否移动过去也是服务器的事情,这种判断很简单的
保存一个表格,记录位置上的物体信息,判断不复杂,很快的。
tianyaoxiayu 2004-04-05
  • 打赏
  • 举报
回复
这个问题很复杂,要想知道就加我的QQ 2211622

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧