from: http://wenku.baidu.com/view/cf3353df50e2524de5187e36.html
测试环境: 同PC机,双开不同角色的客户端
测试目的: 得到现在市场上主流游戏的自动寻路和玩家同步的实现方式的技术分析。
前提分析: 首先,需要说明几点,游戏中位置信息的同步,其实质是在同步时间。根据T=S/V的公式我们可知,事实上我要需要不同客户端上的角色移动在相同的时间内完成同一事件,那么我们一旦因为延迟造成不同客户端的角色位置差异就要通过更改2点来实现弥补。
1) 一是改变S,即不同客户端上同一角色在执行一个移动事件时,所行走的路程不同。即,在不同客户端产生位移差距后,我们通过改变落后,或者置前的客户端玩家所走的路程来实现位移弥补。实现该思路必须解决的问题就是:因为自动寻路是根据A星算法得出,因此所走的路线才不可能与碰撞体相撞。而一旦我们通过改变S来实现同步的话,必然会使玩家所走的路线有所不同。
因此表现为:本地客户端在模拟网络玩家的移动的时候,一旦改变了路线,就可能让角色与碰撞体相撞。
也可以使模拟的角色产生瞬移来模拟,该方法一般是出现在角色位置信息差距较大的时候。
2) 二是改变V,即所走的路线完全是有该角色的本地客户端所计算出来,通过服务器传输给不同的客户端模拟,而网络延时所造成的位移差,只有通过不同的速度来使角色基本在同一时间完成同一个寻路事件。(本方法也就是我所提出的方案,即天龙八部所采用的方式)。
表现为:玩家移动时的速度可能根据不同的网路延时而改变。
另外也可以采取低阀值的位移模拟,一旦网路卡住则停下,等待新的数据到来再进行移动。
表现为:角色的移动过程中会出现大量停顿。
具体游戏分析
1.蜀门
游戏类型:蜀门是一款2.5D的武侠风MMORPG类游戏。
游戏中的角色同步的分析: 首先,经过2个不同角色的分析,发现该游戏的同步具有以下几个特点:
1. 本地客户端先行模拟。即不论本地客户端的位移信息是否需要服务器的反馈,系统都是先默认让本地客户端的角色先行执行移动。
表现为:点击移动之后无论网路是否延迟,都将瞬间执行移动。
优点:可以让本地用户的角色移动异常流畅,丝毫不受网络的影响,带给用户流畅的游戏操作感。缺点:因为此方式的前提是先默认本地客户端所计算出的位移信息是完全正确的。因此可能带来一些用户先行模拟而进行了一些非法的操作的问题。如果要避免速度外挂所带来的问题,则需要服务器端对发送过来的信息进行严格验证。2. 游戏中本地客户端模拟网络玩家的运动时,网络玩家的移动速度并没有出现改变,而采用的是移动过程中不断停顿的方式来实现的移动模拟。当与正确的位移信息差异过大时候,采取瞬移的方式来纠正位移。
游戏中角色所走的路线完全不同。即我发现当网路相当卡的时候,本地玩家角色进行了2次寻路事件,而同角色的网络玩家角色的模拟只执行了一次寻路事件,但基本保障了执行完事件后玩家所在的位置是相同的,但是因为所走的路线不同,所以有可能会造成穿越碰撞体的事件。除非在模拟之前,网络角色所在的客户端也进行了一次A星算法。最后,我找了一个碰撞体,并切针对带碰撞的自动寻路进行了观察,发现2个客户端针对同一个寻路事件,皆进行了A星算法,因此才造成的2个客户端角色所行走的路程不同。本地客户端走的路线如图1.1,另一客户端看到该角色所走的路线为图1.2。因为S不同,V相同,则可知,2个客户端所完成寻路事件的时间是不相同的。但是可被控制到一定的范围。
总结:由于该游戏采用的是V不变,而多种方法改变S的方式来实现移动同步,因此游戏画面中会出现闪现,行走路线完全不同,开始和完成寻路事件的时间完全不同。网络角色的开始移动模拟与本地客户端的开始移动之间的间隔大约在1-10+秒左右,取决与网络速度。因此可确定该方法的实现思路如下:
1.该游戏采取的方式并非是路点信息的传输来实现的。
2. 对于网络角色的移动模拟,采用了2种方式,一是当移动不涉及碰撞体,或者不可行走区域时,我们采用了直接直线行走的方式,未完成的寻路就需要改变时,直接改变目标皆可。(这点可采用射线检测的方法来判断是否需要A星算法),当需要使用A星算法时,网络角色的模拟采用的是只需要知道目标点,具体的路线由需要模拟该网络角色的本地客户端承担计算。因为野外地图发生碰撞的可能行比较小,再加上只计算同屏的玩家的位置模拟,因此客户端能承担。也因为如此才会使2个客户端之间的路程产生不同。
估计实现该效果的服务器通信数据结构应为:
Send(CurPos,TargPos……);//该角色的本地客户端向数据库发送消息 Recved(CurPos,TargPos……);//与该玩家所在同屏列表中其他玩家的客户端 收到服务器发来的消息结构 If(IsNeedA*())//先得到要去这个目的地,是否需要A*算法 { 直接向目标走去 } else { 从新计算本地所绘制的角色的当前位置到目标位置的A*路径 根据路径向目标走去 }
3. 因为同屏显示多个玩家角色,如果都需要进行A*的话,就必须对各个角色的A*进行需求排序,单独开辟一个A*线程来实现。
4.该算法的前提是可以在一定范围内允许不同用户的同一角色可以在不同时间内完成寻路事件。
2. 天龙八部
游戏类型:天龙八部也是一款2.5D的武侠风MMORPG类游戏。
游戏中的角色同步的分析: 首先,经过2个不同角色的分析,发现该游戏的同步具有以下几个特点:
① 同样是本地客户端先行模拟。
② 游戏中本地客户端模拟网络玩家的运动时,网络玩家的移动速度出现了很大的变化,本地玩家角色(A)的每一次寻路操作都会引发其他能看到A的客户端(B)所绘制的A角色的移动。由此可知,该游戏是采用的目标为任务索引的方式完成同步。即玩家A每操作一次寻路,玩家B都会收到本次操作的目标,并加入任务队列中,每个移动任务都会被玩家B的客户端执行,并且以加速的方式实现在一定时间范围内的同步效果。同样,当与正确的位移信息差异过大时候,采取瞬移的方式来纠正位移。
由上图可知:A*在执行该移动事件的时候一共所花费的时间要远小于A的时间。但是由于A*是由任务驱动的,则可知A和A*所走的路程完全一致,根据V=S/T, A*得速度要小于A。
游戏中角色所走的路线完全一致
从时间上来说,T1>=T1* ,并且T2>=T2*。取决于网络速度。
总结:由于该游戏采用的是尽量使S不变,而多种方法改变V的方式来实现移动同步,因此游戏画面中会出现角色速度的改变,但是被控制到一定范围内。当位置差距较大,则采用瞬移的方式维护同步。因此可确定该方法的实现思路如下
1.该游戏采取的方式是采用了路点信息的传输来实现的。所有的寻路节点信息都由本地客户端计算出并通过服务器广播给其他客户端。减轻了其他客户端的计算负担。
2.对于网络角色的移动模拟,在保持2个客户端移动相同的情况下,以速度补时间的方式来实现。较适用于对同步要求较高,画面流畅性较高的游戏。对于PK系统比较重要的游戏来说,位置的同步非常的关键,这也是调节手感、走位等等因素必备的条件。而采用这种方式,极大的保留了位置信息的准确性。在网络正常(不会掉包)的情况下,每一个玩家角色A的操作都会给另外的客户端上的角色A*的位置改变。极大的保留了PK系统的准确性。
总结:对于不同的游戏需求采取不同的方式。
当对玩家某一时刻的位置要求不需要精确时,可采用方案一,优点是:客户端服务端通讯简单。缺点,角色位置定位不准确,只能保证最终位置的正确性。
当对角色某时刻的位置要求精准时,例如PK 系统要求很完善那么就需要精确的位置显示以配合玩家养成PK手感,那么就需要采用V改变的方式,可以确保在移动中的某一时刻,该方案所实现的角色的位置是较第一种方案精确的。
相关推荐
《MMORPG游戏自动寻路及移动同步技术分析》 MMORPG(Massively Multiplayer Online Role-Playing Game)游戏的自动寻路和移动同步技术是确保游戏体验流畅性的重要组成部分。通过对几款主流游戏的深入研究,我们可以...
在游戏开发中,自动寻路插件SimplePath可以用于多种情况,比如NPC的智能行为、玩家角色的移动、甚至是多人在线游戏中的同步寻路。通过理解并熟练掌握这个插件,你可以创造出更动态、更真实的游戏世界。 **总结** ...
在这款游戏中,光源模拟真实世界中的光线传播,影响物体的色彩、阴影和反射。AS3可以利用Shader语言(如Alchemy或Stage3D)实现复杂的光照模型,如环境光、点光源、聚光灯等。光照计算涉及颜色混合、向量运算以及对...
《天龙八部3》是一款深受玩家喜爱的大型多人在线角色扮演游戏(MMORPG),其源码是游戏开发的核心组成部分,涉及到大量的编程技术和游戏设计原理。在这个主题下,我们将深入探讨自动打怪和自动放技能这两个重要功能...
通过研究这50款游戏的源码,你可以逐步掌握游戏开发的核心技术,并能灵活运用到自己的项目中。同时,源码阅读也是一种极好的学习方式,它能帮助你直观地理解代码背后的逻辑,提升编程思维和解决问题的能力。无论你是...
【Java游戏源码:我是大皇帝】是一款基于Java编程语言开发的游戏项目,它为学习和研究游戏开发提供了宝贵的资源。这个压缩包包含了游戏的核心代码、素材以及必要的资源文件,使得开发者可以直接导入到Java开发环境中...
网络游戏开发是一个涵盖多个技术领域的复杂过程,而"网络游戏开发导论(vc源码)"则可能是一个基于Visual C++(简称VC)的初级教程或项目,旨在帮助初学者理解和实践游戏开发的基础概念。Visual C++是一款强大的编程...
【iOS游戏源代码_iOS源码】:这个标题暗示了我们正在讨论的是关于iOS平台上的游戏开发源代码。iOS游戏开发通常涉及到Objective-C或Swift编程语言,使用Apple的Xcode集成开发环境(IDE)。源代码是程序员编写的游戏...
Unity是一款跨平台的游戏开发引擎,支持2D和3D场景设计,广泛应用于游戏、模拟和可视化项目。其强大的脚本功能和易用性使其成为许多开发者首选的工具。在Unity中,我们可以利用C#进行编程,创建和控制游戏对象的行为...
- **帧率稳定**:使用时间步长(Fixed Timestep)和双缓冲技术保证游戏运行流畅,避免因设备性能差异导致的游戏体验不一致。 8. **网络同步算法**: - **断线重连机制**:在网络不稳定时保持游戏连接,如使用TCP...
在“arm机器人设计”这一项目中,我们主要探讨的是如何利用ARM处理器与单片机进行协同工作,以实现复杂的机器人自动化功能,如自动寻路。ARM处理器因其高性能、低功耗的特点,在现代嵌入式系统中广泛应用,尤其在...
16. 导航网格(NavMesh):NavMesh是一种用于实现自动寻路的网格(D),在游戏AI路径规划中扮演重要角色。 17. 网格层属性:Unity中,网格层的固有选项不包括Walkable(B),因为Walkable是NavMeshAgent层的一部分,而...
最后,实现二维迷宫的A*寻路算法,A*算法是一种高效的路径搜索算法,它结合了Dijkstra算法和启发式搜索,要求申请者具备一定的图论和算法分析能力。 这个作业的意义在于,不仅测试了申请者的现有技能,更看重他们的...
我们需要设置合适的导航网格(NavMesh),以便运输工具可以自动寻路。这涉及到路径点、路径查找算法和动态障碍物的处理。 4. **物理模拟**:为了模拟真实的运动效果,运输工具需要与物理世界进行交互。Unreal ...
拓扑分析和路径分析是地理信息系统中用于解决复杂空间关系和寻路问题的算法。开发者需要了解这些高级分析功能的实现方法。 7. 获取数据源列表、数据库列表、图层列表,实现图层叠加分析 开发者需要掌握如何获取...
3. SVC(Switched Virtual Circuit)是临时建立的逻辑连接,由数据终端用户在通信前拨号建立,通信结束后自动拆除。PVC(Permanent Virtual Circuit)则类似于租用的专线,由网络运营商预先配置,提供固定逻辑连接,...