单一世界架构初探之世界地图

和其他网游不同的是,单一世界具有庞大的地图,比如一个地球,这种情况和导致地图的数据量很大,几个G都是正常的事情。在这种情况下,处理策略有很大的不同。

以魔兽世界为例,所有的客户端和服务端都有相同的地图,这样保证在设计地图的计算时,不需要从服务端得到地图数据,减少数据传输量。在第二人生和激战中,有些不同,本地没有全部的地图。激战在跳跃到新的地方时,需要有个很长的延时,似乎是从服务端读取地图数据。

但是单一世界一个显著特征就是地图庞大,显然不可能完全将地图放在本地。不过我们也应该看到,在单一世界中,本地也没有必要放置全部的地图数据。就像你人在亚洲,欧洲和美洲的地图只要你要去的时候才需要。而且,即使你在亚洲,日本的地图也是你要去的时候才需要。多数情况下,你是从新手村开始,逐步探索各个地方。我的一个策略就是逐步下载。比如你在新手村的时候,我可以通过富裕带宽,帮你下载附近城镇的地图,然后保存在本地。至于不需要的地图,完成可以忽略不记。

以上提到的是世界地图的下载策略。世界地图还有涉及到生成的问题。和下载一样的问题,就是大。我们不可能一下生成全部的地图。世界地图完全可以采取2个策略来生成,一个策略是联邦制,就是由不同的人或者组织生成标准格式的地方来挂接到世界地图中,另外一个策略是逐步生成,因为开始的时候,人一般会比较少,所以生成的地图会比较小。随着人数增多,逐步开发更多的地图,就像魔兽世界这样,逐步开放外域等其他地域。这2个策略没有矛盾,完全可以同时采用。但使用联邦制会涉及到利润分成的问题,还需要商业层面来解决。

我曾经有个想法,和魔兽争霸以及CS相似,让用户来生成地图,然后挂接到世界地图,但涉及到资源需要审核,不然就乱套了。

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...