MMORPG中游戏世界的构建

2023-10-13 07:38
文章标签 构建 世界 游戏 mmorpg

本文主要是介绍MMORPG中游戏世界的构建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.cppblog.com/Fox/archive/2007/12/16/game_world_architecture.html

 

Author: Fox

一个 MMORPG ( Massively Multiplayer Online Role Playing Game )的架构包含客户端和服务器两部分。客户端主要涉及计算机图形学、物理学、多媒体技术等,服务器主要涉及网络通信技术、数据库技术,而人工智能、操作系统等计算机基础学科知识的应用体现在 MMORPG 开发过程中的方方面面。

一、游戏世界的划分

理想状态的游戏世界仅由一个完整的场景组成,在《魔兽争霸 III 》、《 CS 》这样的单机游戏中,所有玩家位于该场景中,在理论上,位于该场景中的任意玩家都可以看到游戏中所有玩家并与之交互,出于公平性和游戏性(而不是技术上)的考虑,游戏中并不会这样做。

然而,目前的 MMORPG 中,几乎没有任何一款可以做到整个游戏世界只包含一个场景,因为在一款 MMORPG 中,同时在线的玩家数量成百上千,甚至是数万人同时在一个游戏世界中交互。以现在的网络技术和计算机系统,还无法为这么多玩家的交互提供即时处理。因此, MMORPG 的游戏世界被划分为大小不等、数量众多的场景,游戏服务器对于这些场景的处理分为分区和无缝两种。

在 分区式服务器中,一个场景中的玩家无法看到另一个场景中的玩家,当玩家从一个场景到另外一个场景跨越时,都有一个数据转移和加载的过程(尤其是从一个分区 服务器跨越到另外一个服务器时),玩家都有一个等待的时间,在这段时间内,服务器的主要工作是实现跨越玩家数据的转移和加载以及后一个场景中玩家、 NPC 等 数据的传输,客户端的主要工作是实现新场景资源的加载和服务器通信。主要时间的长短主要取决于后一个场景中资源数据的大小。分区式服务器的优点主要是各分 区服务器保持相对独立,缺点是游戏空间不够大,而且,一旦某个分区服务器中止服务,位于该服务器上的所有玩家将失去连接。

所 谓无缝服务器,玩家几乎察觉不到场景之间的这种切换,在场景间没有物理上的屏障,对于玩家而言,众多场景构成了一个巨大的游戏世界。场景之间,甚至服务器 之间“没有了”明确的界线。因此,无缝服务器为玩家提供了更大的游戏空间和更友好的交互,实现了动态边界的无缝服务器甚至可以在某个服务器中止服务时,按 一定策略将负载动态分散到其他服务器。因此,无缝服务器在技术上要比分区服务器更加复杂。

目前国内上市的 MMORPG ,大多采用分区式服务器,做到无缝世界的主要有《完美世界》和《天下贰》等,国外的 MMORPG 中,像《魔兽世界》、《 EVE 》等,都实现了无缝世界。

无缝服务器与分区式服务器在技术上的主要区别是,当位于场景 S1 中的玩家 P1 处于两个(甚至更多)场景 S1 、 S2 的边界区域内时,要保证 P1 能够看到场景 S2 中建筑、玩家、 NPC 等可感知对象。而且边界区域的大小要大于等于 P1 可感知的范围,否则就可能发生 S2 中的可感知对象突然闪现在 P1 视野中的异常。

无疑,无缝世界为玩家提供了更人性化和更具魅力的用户体验。

二、无缝世界游戏服务器的整体架构

MMORPG 的服务器架构从功能上主要划分为三种:

1、 登录服务器( Login Server )

登录服务器用于玩家验证登录,并根据系统记录玩家信息得到其所在节点服务器,并通过世界服务器为登录玩家和对应节点服务器建立连接。

2、 世界服务器( World Server )

世 界服务器将整个游戏世界划分成不同场景,将所有场景按一定策略分配给节点服务器,并对节点服务器进行管理。世界服务器的另一功能是与登录服务器交互。因 此,世界服务器是登录服务器、节点服务器的沟通桥梁,当然,一旦玩家登录成功,世界服务器将主要处理节点服务器间的通信。因此,世界服务器对于玩家是透明 的。

3、 节点服务器( Node Server )

节点服务器负责管理位于该节点的所有玩家、 NPC 的所有交互,在无缝世界游戏中,由于边界区域的存在,一个节点服务器甚至要处理相邻节点上位于边界区域的玩家和 NPC 的信息。

在具体实现上,不同的 MMORPG 为了便于管理,可能还会具有 AI 服务器、日志服务器、数据库缓存服务器、代理服务器等。

三、 无缝世界游戏服务器的主要技术需求

1、 编程语言( C/C++ 、 SQL 、 Lua 、 Python )

2、 图形库( Direct 3D 、 OpenGL )

3、 网络通信( WinSock 、 BSD Socket ,或者 ACE )

4、 消息、事件、多线程、 GUI

5、 OS

三、无缝世界游戏服务器需要解决的主要问题

1、 资源管理

无论是服务器还是客户端,都涉及到大量资源:玩家数据、 NPC 数据、战斗公式、模型资源、通信资源等。当这些资源达到一定规模,其管理的难度不可忽视。而且,资源管理的好坏,直接关系到游戏的安全和生命。

2、 网络安全

安全永远是第一位的,我们无法指望所有的玩家及其所持的客户端永远是友好的。事实上,威胁到游戏的公平性和安全性的大多数问题,归根结底,都是由于网络通信中存在的欺骗和攻击造成的,这些问题包含但不限于交易欺骗、物品复制。

3、 逻辑安全

逻 辑安全按理说应该是游戏中最基本的考虑,覆盖的范围也最广最杂。随机数系统是一个非常值得重视的问题,随机数不仅仅用于玩家可见的一些任务系统、战斗公 式、人工智能、物品得失等,还可用于网络报文加密等。因此,随机数系统本身的安全不容忽视。另外一个常见的逻辑安全是玩家的移动,最主要的就是防止加速齿 轮这样的变态操作。

4、 负载均衡

MMORPG 中 的负载均衡包括客户端及服务器资源管理和逻辑处理的负载均衡,其中最难预知的是网络通信的负载均衡,正常情况下的网络通信数量是可以在游戏设计时做出评估 的,但因恶意攻击造成的网络负载是无法预测的。因此,负载均衡所要处理的主要是实时动态负载均衡和灾难恢复。负载均衡需要解决的问题包括负载监控、负载分 析、负载分发和灾难恢复。

5、 录像系统

录像系统的构建,主要用于重现关键数据的输入输出,如玩家交易、玩家充值,或者当 bug 出现后,为逻辑服务器(泛指上文提到的所有类型服务器,主要是节点服务器)相应部分启动录像系统。待收集到足够数据后,通过录像系统重现 bug 。为了使逻辑服务器不受自身时间(如中断调试等)的影响,还可以专门设计心跳服务器来控制数据传输。

四、总结

在 MMORPG 中,真正的 bug 永远存在于将来。从这一点出发,关于 MMORPG 中游戏世界的构建,怎样苛刻的思考都不为过。

参考资料:

1、 [美] Kim Pallister编, 孟宪武 等译. 游戏编程精粹5, P467-474, P516. 人民邮电出版社, 2007年9月. 北京.
2、 [美] Thor Alexander编, 史晓明 译. 大型多人在线游戏开发, P174-185. 人民邮电出版社, 2006年12月. 北京.
3、 [美] Dante Treglia编, 张磊 译. 游戏编程精粹3, P117-122. 人民邮电出版社, 2003年7月. 北京.
4、 [美] Mark DeLoura编, 王淑礼 等译. 游戏编程精粹1, P90-93. 人民邮电出版社, 2004年10月. 北京.
5、 [美] Douglas 等著, 於春景 译. C++网络编程 卷1. 中国电力出版社, 2004年11月. 北京.
6、 [美] Stephen D. Huston 等著, 马维达 译. ACE程序员指南. 中国电力出版社, 2004年11月. 北京.
7、 [美] Erich Gamma等著, 李英军 等译. 设计模式. 机械工业出版社, 2000年6月. 北京.
8、 游戏引擎全剖析. http://bbs.gameres.com/showthread.asp?threadid=101293 .
9、 服务器结构探讨:登录服的负载均衡. http://gamedev.csdn.net/page/351491d0-05ad-48a4-85e1-77870bc1eef3 .
10、服务器结构探讨:最终的结构. http://gamedev.csdn.net/page/28695655-974c-4291-8ac4-2589c4e770d3 .
11、谈谈网络游戏服务器解决方案. http://www.beareyes.com.cn/2/lib/200411/08/20041108102.htm .
12、负载均衡——大型在线系统实现的关键(下篇)(服务器集群架构的设计与选择). http://blog.csdn.net/sodme/archive/2005/06/15/394576.aspx .
13、云风的BLOG. http://blog.codingnow.com/

/*****************************************************************************
  从0:00到5:00,在写这篇随笔的过程中,我翻找、点击着上面的这些资料,其实还有更
  多的资料,没有记在上面,算是为开题做的准备。现在依然是睡意全无。越写越觉得
  不够,越想越觉得还有更多东西写不出来……
  PS:这些资料大都不是第一次翻,以前看这些资料大多只是单纯的看,现在有目的的
  看,才觉得都写得很有味道。不管是不是同意所有观点,都不是本文讨论的重点。
*****************************************************************************/

这篇关于MMORPG中游戏世界的构建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201710

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @