MMO 魔兽世界。。等诸多的开放世界游戏都用到了无缝大世界构建。不一一列举了。下面开始我们的大地图世界构建,和会遇到什么样的问题难点。

通常,都是先把游戏世界分成小块,然后在相邻的小块间加入一些服务器间的通讯,每个服务器都可以自主地作出反应。服务器互相通知那些与边界接近的对象,这样来,每个服务器都可以通过它们的本地代理来对远程对象(在某种程度上)进行控制。

问题1:分割游戏世界

怎样才能最好地划分游戏世界?这个问题往往依赖于特定的游戏。在一个由玩家控制游戏人物的基于地形(terrain-based) 的游戏(也就是典型的在线RPG)中,应该假设游戏世界处于一个二维平面上,并按照二维网格对其进行划分,这是最可行(也是最简单)的方法,并且也适用于三维游戏世界。对于那些真正的“6度空间(six degrees offreedom)”仿真游戏来说,这个方法也许并不好,使用八叉树或其他方式来进行空间细分可能会更合适。

问题2:  平均分配

下一个需要考虑的问题是相邻区域的共享边界应该有多大。最小情况下,它们应该与客户端的游戏世界和/或玩家的可感知范围一样大。如果再小一点的话,当玩家在服务器边界附近时,他视野的对象可能和边界另一边的其他玩家不同,这可能会引起很多对这一游戏特性的滥用。

图描述了这种情况。服务器A和B共享同一个边界,边界区域中的对象会被映射到另一端。玩家P2在共享边界中,而玩家P1在共享边界外。P1的可见对象集合由PI周围的虚线表示,它包含了P2。但是由于P1并没有映射到服务器B中,他对于P2来说是不可见的,即使P2和P1具有相同的可视范围。由于服务器B完全不知道P1的存在,因此无法把关于P1的信息告知P2。所以PI也许可以攻击P2,但P2却不能攻击P1。

下面,看一个更复杂一点的(图2)。

问题3:详细的代理对象还是精确的代理对象( 两者不可兼得)

边界区域中的对象可以跨越服务器边界进行交互。当一个对象进入边界区域时,它所在
的服务器会通知相邻的服务器,后者会创建一个代理对象来表示远程对象。同样地,当这个
对象从边界区域移动到服务器“内部”时,这个代理对象会被销毁。
另一个必须解答的问题是代理对象应该为游戏提供多少信息。如果信息太少,就很难在
没有异步消息传递的情况下编写任何游戏代码:如果信息太多,就需要对更多的数据保持同
步,这必然也会导致更多的数据得不到同步。一个实用的代理对象至少必须包含位置、方向、
碰撞信息及对象类型等基本属性。此外,它还可以包含任何其他依赖于游戏且不会发生变化
的属性(譬如说:比例、颜色等)。
为了减少服务器间为了更新代理对象而进行的通讯,可以为对象属性赋予优先级。也就
是说,确定每一个需要映射的属性,然后确定应该以多快的速度对它进行更新。当一个低优
先级的属性发生改变时,代理对象可以延迟更新(视环境而定,甚至可以永不更新)。这么做
通常会使同步问题更加严重,但却可以在效率和精确度之间进行平衡。

问题4:定义边界

另一个需要考虑的技术细节是服务器的边界是柔性的还是刚性的。当一个对象越过刚性服务器边界时,它的所有权会立即转移给另一个服务器,没有任何延迟。而一个柔性边界在转移前只允许对象“略微跨越”边界。转移对象的代价可能很大,而柔性边界.可以减少对象转移的数量,但是代码的编写会变得更为复杂。譬如说,如果有些代码(无论游戏开发人员尽多大努力去避免,总会有一些)需要对代理对象使用不同的方式进行处理,那就不能简单地用“是否在本服务器边界内?”这样的判断来区分本地对象和代理对象。

问题5:静态边界还是动态边界

最后需要考虑的是在游戏运行过程中是否可以改变服务器的边界一一也就是说,它们是
静态的(不变的)还是动态的(可移动的)。要正确地设计和实现可以动态调整的服务器边界
是非常复杂的。譬如说,游戏系统必须通过-一个原子事务(原子事务的各个步骤不可分割,
要么全部成功,要么全部取消)处理把一-组对象整体转移到另-一个服务器上,并且不能产生
任何玩家可以察觉的延迟。如果边界和两个以上的服务器相关联(在实践中这必然会发生),
那么边界的调整将涉及到3个或更多的服务器。
即使实现了这个机制,要正确判断应该在什么时候对服务器边界进行怎样的调整也是非
常困难的。过于频繁的调整会带来很大的资源消耗。而过少移动边界则会导致服务器负担过
重,尤其是出于某些原因大量的玩家同时在一-个地点聚集时(譬如说开设了一个新的地下城)。
在确定新的边界时,必须确保修改后的服务器负载是均衡的,从而降低在今后对此进行重复
修改的可能性。服务器负载依赖于很多参数:玩家数量、AI 数量、游戏世界中有多少可碰撞
对象等等。这些都需要进行大量的调整,才能得到正确的结果。

6:总结

一张图片胜过千言万语(上面那张图2), 结合上面的问题。这张图片中有3个相交的服务器,在边界周围有很多对象,它们处于不同的位置。阴影区域代表共享边界,其中的对象会映射到其他服务器中。交叉线阴影标出的区域必须被映射到两个相邻服务器中。对象1.7、9对于它们各自的服务器来说是严格本地的。对象2、4、8在相应的相邻服务器中有一个代理。对象3、5、6有两个远程代理。

美工上的难点:

令人难以置信的是,在无缝世界中就连美工制作也会变得更为复杂。创建像建筑物那样
的大型对象会受到服务器边界区域大小的影响;任何对象的最大尺寸必须小于共享边界的大
小:否则,这样的对象可能会由于跨越边界区域而导致问题。
图,一个大型对象位于服务器A中,并且在共享边界中。服务器B.上的玩家P可
能看不到这个对象(因为P在共享边界之外,而这里共享边界的宽度恰巧和玩家的感知半径
相同),然而很明显它应该是可见的。更糟糕的是,P可能和它发生碰撞,这不仅会给用户带
来不必要的麻烦,还会给运营团队带来很多莫名其妙的错误报告。

优点:1,更大的游戏世界空间  2,可伸缩性可扩展性 3,不确定边界 4,不需要载入地图

缺点:1,制作难度大, 不确定性因素多 2,物品交易实现复杂 3,模型构建复杂 4,美工 5,运营维护成本高。

后记:为什么选择无缝大地图世界构建???

小公司千万谨慎选择(有钱老板可以忽略),无缝大世界一种新的游戏模式,玩法和体验上,让玩家可以在里面构建自己的世界,组队吃鸡,互动性强。类似的游戏 绝地求生,无限法则,手游就不说了。鹅厂的几款和猪厂的几款,大家都耳熟能详。不在赘述。

拜拜!!!

无缝大地图世界构建!!!为什么选择无缝大世界地图构造????相关推荐

  1. 地图的历史:从古代地图到 GIS

    地图的演变走过了漫长而曲折的道路.几千年来,人类以洞穴壁画.石碑.宗教地图.印刷地图和现代多层数字地图的形式记录了他们周围的环境.从古老的巴比伦,到文艺复兴时期和探索时代,再到现代制图时代- 绘制历史 ...

  2. android+世界地图高清版大图片,世界大地图app下载-世界大地图全息实景安卓版 - 超好玩...

    世界大地图app下载,一款具有全球实景全息地图的地理地图服务软件.世界大地图全息实景安卓版提供在线实时定位系统,用户可以随时查看自己所在位置,并查看实时全息地图,同时提供精确地导航系统,方便用户规划路 ...

  3. 大数据分析经典案例,无缝整合OA、ERP、MES等系统

    ​随着工业化和信息化的发展,传统企业公司的规模和体量都在迅速扩张,逐渐接触到运营和管理的天花板,粗放型管理带来了许多问题,精细化运营势在必行. 那么如果提高企业的运营管理效率.实现精细化运营呢?答案就 ...

  4. c语言利用二维数组制作地图,用程序实现RPG背景地图二维数组构建

    朱艳萍 摘要:该文主要阐述了前端RPG开发中,当作为背景的地图较为复杂时,如何用程序的方法构建与背景地图一致的二维数组,采用图文结合论述其算法,并使用原生JavaScript语言实现. 关键词:二维数 ...

  5. 阿里风控大脑如何应用大数据来构建风控体系?

    简介: 2019年双11阿里风控保护了约388亿消费者的操作行为,同时挡住了约22亿次恶意攻击.在首席技术官大数据专享会,阿里巴巴新零售技术事业群高级数据技术专家丁明峰为大家介绍了阿里风控大脑关于大数 ...

  6. python语音地图定位_Slam(即时定位与地图构建) 知识篇

    Slam即时定位与地图构建 技术解释 同步定位与地图构建(SLAM或Simultaneous localization and mapping)是一种概念:希望机器人从未知环境的未知地点出发,在运动过 ...

  7. 《塞尔达传说:荒野之息​》的大世界地图是怎么制作的?

    荒野之息的场景地形做得特别丰富,探索的体验感非常好,个人认为是场景方面表现最好的一个维度.本文着重于荒野之息的地形进行分析,归纳出以下几点来说明:环境分区:区域隔离与连接:地形构造的搭配. 01 环境 ...

  8. 基于栅格地图的粒子群算法_基于GMapping的栅格地图的构建

    上篇文章讲解了如何在ROS中发布栅格地图,以及如何向栅格地图赋值. 这篇文章来讲讲如何将激光雷达的数据构建成栅格地图. 雷达的数据点所在位置表示为占用,从雷达开始到这点之间的区域表示为空闲. 1 GM ...

  9. 第二届大数据世界论坛 聚焦行业需求

    本文讲的是第二届大数据世界论坛 聚焦行业需求,随着现代技术的发展,企业产生的业务数据和客户数据早已汗牛充栋.如何有效的组织管理数据,提供商业解决方案,已经不是单纯的IT技术问题,而是与企业未来发展前途 ...

最新文章

  1. 【组队学习】【33期】吃瓜教程——西瓜书+南瓜书
  2. 使用Windbg解析dump文件
  3. MySQL主从介绍、准备工作、配置主、配置从、测试主从同步、断电后恢复主从...
  4. mongodb 持久化 mysql_scrapy数据持久化存储(MySQL、MongoDB)
  5. win 2008 server 更改远程桌面端口的方法
  6. mac下 unix网络编程环境安装
  7. echarts地图显示问题
  8. FutureMapping:空间人工智能的计算结构
  9. TCPIP网络编程项目式教程(微课版)
  10. 台湾芯唐(华邦)强势推出:W79E2051/W79E4051,兼容AT89C2051/4051
  11. 对 sass和less的理解
  12. 数理统计实(试)验—双因素方差分析(有交互作用)excel操作分析方差分析表怎么看?
  13. 鼠标失灵,但鼠标和USB接口都是好的的情况。
  14. 2018年Android面试题含答案--适合中高级(上)
  15. ‘\t‘和“\t“的区别及作用
  16. 51单片机波形发生器产生各种波形的原理
  17. 机器人门禁控制盒怎么接线方法_门禁系统接线方法
  18. centos测试主机网络极限速度
  19. macOS 13.0 Cocoapods安装 (you don‘t have write permissions for the /Library/Ruby/Gems/2.6.0 directory)
  20. 金融科技企业哪家强?来看“2020中关村金融科技30强榜单”

热门文章

  1. scala array算子
  2. ubuntu 9.10下linux qq 自动退出的问题
  3. 2023最新仿CNZZ网站访客流量统计系统源码/功能强大+带简易安装教程
  4. Linux随记(四)
  5. csgo服务器不稳定,csgo连接到任意官方服务器失败是因为什么
  6. 达芬奇密码 第六十二章
  7. 中国深圳到加拿大海运专线的时效和费用
  8. android 手机设置铃声
  9. console.log()和console.dir()的区别
  10. erlang-21.3.8.6-1.el7.x86_64.rpm依赖检测失败