当前位置:  开发笔记 > 程序员 > 正文

实施实时多人游戏有哪些问题

如何解决《实施实时多人游戏有哪些问题》经验,为你挑选了3个好方法。

我有一些使用套接字制作多人回合制游戏的经验,但我从未尝试过实时动作游戏.我需要处理哪些额外的问题?我是否需要保留玩家行为的历史,以防滞后的玩家在过去做些什么?我真的需要使用UDP数据包还是TCP足够?还有什么?

我还没有真正决定要做什么,但出于这个问题的目的,你可以考虑一个带有XY运动的10人2D游戏.



1> Jeff..:

"客户端服务器"或"点对点"或介于两者之间的东西:哪台计算机具有哪些游戏操作的权限.

对于基于回合制的游戏,通常很容易说'服务器具有最终权限而我们已经完成'.对于实时游戏,通常这种设计是一个很好的起点,但是一旦你增加了延迟,客户端的动作/动作就会感觉不到反应.因此,您添加某种"延迟隐藏",允许客户端输入立即影响其角色或单位来解决该问题,现在您必须处理客户端和服务器游戏状态开始分歧时的协调问题.9次outta 10就好了,你弹出或者将客户端影响到的对象弹出到权威位置,但是10次中的1次是当对象是玩家头像或其他东西时,该解决方案是不可接受的,所以你开始给予客户一些行动的权力.现在你必须协调服务器上的多个游戏状态,并通过恶意客户端打开你自己的"作弊",如果你关心那种事情的话.这基本上是每个传送/欺骗/任何错误/欺骗出现的地方.

当然,你可以从一个模型开始,'每个客户都有'权限'他们'对象',并忽略作弊问题(在很多情况下都很好).但是现在你很容易受到游戏模拟的巨大影响,如果那个客户退出,或者"只是落后于跟上模拟" - 实际上每个玩家游戏最终会感受到/感受到滞后或以其他方式表现不佳的客户,其形式是等待滞后的客户赶上,或让他们控制的游戏状态不同步.

'synchronized'或'asynchronus'

确保所有玩家在同一游戏状态下运行的常见策略是简单地同意玩家输入列表(通过上述模型之一),然后在所有机器上同步播放游戏模拟.这意味着模拟逻辑必须完全匹配,否则游戏将不同步.这实际上比听起来更容易也更难.它更容易,因为游戏只是代码,并且当它提供相同的输入(甚至是随机数生成器)时,代码几乎完全相同.这更难,因为有两种情况并非如此:(1)当你意外地在游戏模拟之外使用随机游戏时(2)当你使用花车时.前者通过对什么游戏系统使用RNG的严格规则/断言进行纠正.后者通过不使用浮子来解决.(浮动实际上有两个问题,一个根据项目的优化配置,它们的工作方式非常不同,但即使这个问题得到解决,它们在不同的处理器体系结构中也会不一致地工作,大声笑).星际争霸/魔兽争霸以及任何提供'重播'的游戏最有可能使用这种模式.事实上,拥有重播系统是测试您的RNG保持同步的好方法.

使用异步解决方案,游戏状态机构只需以某种频率将整个状态广播到所有其他客户端.客户端获取数据并将其抨击到他们的游戏状态(并且通常会做一些简单的推断,直到他们获得下一次更新).这里'udp'成为一个可行的选择,因为你每隔约1秒左右就会在整个游戏状态发送垃圾邮件,丢掉这些更新的一部分是无关紧要的.对于游戏状态相对较少的游戏(地震,魔兽世界),这通常是最简单的解决方案.



2> Cetra..:

设置多人游戏涉及一些因素

    协议,您决定是否需要TCP或UDP非常重要.UDP具有较少的开销,但不能保证交付.相反,TCP更值得信赖.每个游戏都有自己喜欢的协议.例如,UDP适用于第一人称射击游戏,但可能不适合需要保持信息一致的RTS

    防火墙/连接.确保您的多人游戏不必进行2000出站连接并使用标准端口,因此轻松实现端口转发.将它与Windows防火墙连接可能是一个额外的好处.

    带宽.这很重要,您打算通过网络连接传输多少数据?我想这将归结为测试和记录吞吐量.如果您需要为每个客户端提供高达200kb/s的速度,您可能需要重新考虑一些事情.

    服务器负载.这一点也很重要,服务器需要对正常游戏进行多少处理?你需要一些超级8核心服务器和16GB的RAM来运行吗?有减少它的方法吗?

我想有更多,但你真的想要一个通过网络和各种连接播放的游戏.



3> Sqeaky..:

规划是你最好的朋友.找出你真正需要的是什么.

加载数据:每台计算机是否都具有相同的型号和图形,并且只通过网络移动名称和位置.如果每个玩家都可以自定义角色或其他项目,则必须移动此数据.

作弊:你要担心吗?你能相信每个客户说的话吗?如果没有,那么服务器端逻辑将与客户端逻辑看起来不同.想象一下这个简单的情况,你的10名玩家中的每一个都可能因为加电而具有不同的移动速度.为了最大限度地减少作弊,您应该计算每个玩家在服务器之间的通信更新之间移动的距离,否则玩家可能会加速攻击,没有任何东西可以阻止他们.如果玩家总是比预期快一点或者有一次跳跃,那么服务器只会将它们重新定位在可能的最近位置,因为它可能是时钟偏差或通信中断一次.然而,如果玩家尽可能地不断移动两次,那么将他们踢出游戏可能是谨慎的.数学越多,

它是如何对等的:即使游戏是点对点的,你可能希望让一个玩家开始游戏并将它们用作服务器,这比试图管理一些更基于云的更容易方法.如果没有服务器,那么您需要使用协议来解决具有不一致游戏状态的2台机器之间的争议.

再次规划是您最好的朋友计划,计划,计划.如果你仔细考虑一个问题,你可以考虑解决大多数问题.然后你就可以开始思考那些尚未解决的问题.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有