3d Game Walkman

3d图形渲染,网络引擎 — tonykee's Blog
随笔 - 26, 文章 - 0, 评论 - 147, 引用 - 0
数据加载中……

服务器端无限大地图的构想

有了客户端的无限大地图,服务器端也可以做做尝试了,服务器比客户端单纯了很多,不用做裁减等复杂的计算工作,但是要维护大量的信息通讯,最棘手的问题就是,如何让“身边”其他玩家知道你在哪里,player数量那么巨大,如果所有的player的状态通知所有的人那就是n的n次方的通讯,可以看来这样的通讯方式是完全不合理的,所以如何确定“身边”这个概念就至关重要了。

有了客户端无限大地图的实现,这个思路就豁然开朗了,有个图例:

把服务器打上格子,把整个地形来个定义                            

定义为 blocks_Tx_Ty_Bx_By                            

Tx Ty 代表的是 Tile的第几行第几列                            
Bx By 代表的是该Tile下Block的第几行第几列                            

把每个block的范围给筐定,这个可以事先计算出来的,很简单                            
人物一旦发生了移动就会发出udp的信号,服务器改变每个人物所在的位置

那么客户端的Role(玩家所操纵的角色)最关心的是周围9个tile里面活动的其他玩家的信息
因为客户端要进行视锥剪裁,

反过来说,角色A移动了,就要通知周围9个tile里面所有的角色,你当前的位置
另外,移动的时候还要看你所在的block发生了改变没有,如果发生了改变,这个信息也要发出去
那么客户端可以更新所观测的角色所在的block,这样客户端的tile作culling和rending以及collising的时候就方便了
客户端要作的只是简单的terrain.AddSenceModel 和 terrain.RemoveSenceModel就能动态更新block中的角色模型了
一个block好歹也有33x33,被观测对象只有block改变了才会做(terrain.AddSenceModel terrain.RemoveSenceModel)这样的操作
这样的操作应该不会特别频繁,客户端应该开销的起

客户端,应该存在一个可观测的9个tile的rolelist,每次发过来的其他玩家的udp positionpack还是要作即时更新的。


目前根据这个思路我就要开展工作了,效率是至关重要的。
按照这个工作实现了再来测试效率,预计本周之内搞定角色之间位置信息的相互通讯。

激动人心的时刻就要到来了。。。。。。
目前只是尝试,更多的细节和感受我会逐步发放上来。

posted on 2008-01-03 19:41 李侃 阅读(269) 评论(3)  编辑 收藏 引用 所属分类: 设计思路

评论

# re: 服务器端无限大地图的构想[未登录]  回复  更多评论   

加油加油,每天都看你弄得那么晚,很心疼啊,不过,只要出结果,就是开心事,对吧~!坚持,要一起分享成功的喜悦啊~!嘿嘿~!
2008-01-04 13:18 | vicky

# re: 服务器端无限大地图的构想[未登录]  回复  更多评论   

恩, 不错。 我最近也再做这方面的研究。 希望可以互相交流一下。
mail: idm_163@163.com
2008-04-14 14:55 | kevin

# re: 服务器端无限大地图的构想  回复  更多评论   

支持
2008-07-16 03:09 | 放屁阿狗

标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: