如果一个人物在客户端行走,发送哪些数据给服务器,而服务器又要怎样使其他客户看到这个人在行走?有人说传递鼠标点击的方向值,或者是每走一个地块发一个坐标,而且都有服务器和客户端校验的问题。
希望做网络游戏的人共同商讨。

解决方案 »

  1.   

    看看这个,类似你的问题:
    http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1460
      

  2.   

    建议你去www.gameres.com,这儿不是那么专业。
    那儿有很多你要的资料
      

  3.   

    这个问题详细的信息你到gameres.com也不会有任何结果。因为它本身太复杂,不是架构师是不能正确回答你的问题的。但他们又往往很忙,根本没有机会回答你。
      

  4.   

    我到gameres去看过,没有实现的细节。我想现在那么多网络游戏都应该涉及到这个必须的问题,所以应该有一套通用点的方案。我想看看例如传奇是怎么做的,大家能不能给点资料?
      

  5.   

    最近商量出一种解决方案,感觉很不错,有代表性。提供给同样需要的朋友,希望大家能给点意见:http://pic.tiexue.net/pics/2005_8_29_23935_423935.jpg如上图,在服务器中,地图由2维块坐标组成,动物移动的最小单位就是一个Tile块。把块分成和屏幕显示窗口等大小的区域,比如下面有9个区域,每个区域都包含一个链表存储属于这个区域的动物,也可存储静物链表。当客户走动时,只需要分析显示窗口所占的区域包含的物体链表,而不需要分析整个地图或整个物体链表。比如下图表示某一客户的显示窗口,占4个区域,就分析这4个区域的人物链表,再筛选出属于这个显示窗口的人物,被视为处于同一可见窗口中,最后把当前用户的走动信息发给所有属于同一窗口的人物。这样对地图上每个人进行如此分析,就形成了地图漫游,使所有客户在当前显示窗口中看到其他人物的走动。
        上图分析的4个区域是最坏情况,因为当前窗口可能只占1个或2个区域,这样更能节省处理复杂度。当人物走动跨越区域时,需要把原来的区域包含的人物链表接点删除,在新区域链表中增加。
        对区域的划分和显示窗口位置都是通过Tile块坐标和人物位置计算出来的。http://pic.tiexue.net/pics/2005_8_29_23936_423936.gif上图表示了客户端窗口地图和服务器地图的通讯。红色点代表当前用户,当用户每点一次鼠标,人物在窗口运动,并把运动方向和所点的坐标传给服务器,服务器在自己的地图上模拟此人物的运动,尽量达到和客户端同步。服务器中的这个人物每走一步向他的客户端发送窗口内的物体信息,以表示窗口内哪些物体出现、那些物体消失,对于静物没必要发送整个窗口的静物信息,因为静物位置不改变,所以只需传新出现的静物信息。和当前人物同一窗口的其他动物,每走一步也向这个人物的客户端发送数据,这样客户端就可以看到其他物体的运动情况。
    客户端收到其他动物的漫游信息后,不用对每一步进行处理,可以保持当前运动状态每3步用服务器传来的信息修正一次,这样保证运动的连续性。也可以把服务器传来的每一步的数据和当前动物运动的位置进行比较,如果相差比较多就纠正,在窗口上就看到了拉扯的情况。想贴个图真是不容易...