Questions tagged «multiplayer»

由多个玩家共同或竞争地在本地或远程播放。

5
您是否需要昂贵的服务器和高档主机才能制作多人游戏?
我已经完成了RPG的开发工作,将其制作成多人游戏似乎更加有趣。SFML具有联网功能,我认为这是可能的,但是再说一次,我一生中从未尝试过有关联网的基本知识,实际上,我对联网的了解非常有限。 从资源角度来看,制作多人游戏需要什么?我不是在谈论MMO,更像是一种合作游戏。我需要大量现金来支付托管和服务器费用吗?
11 c++  multiplayer  sfml 

2
通过套接字对多人游戏进行身份验证
我正在为我正在开发的新多人游戏实现自定义二进制协议。它是基于回合制的策略游戏,因此计时实际上并不重要。目前,我已经完成了系统的基本数据同步部分,并且我想知道MMORPG游戏或类似游戏通常如何进行用户登录/注销和加密。 您能推荐一种在登录时传输安全/秘密密码的方案吗?(Diffie-Hellman密钥交换吗?) 如何对数据包实施强加密?(AES 128位?..或任何方案这一职位是指为“加密强于你很可能会破解”) 是否有数据报格式方案可帮助加强游戏服务器以重放攻击,无效数据包等?

3
多人实时安卓游戏的最佳解决方案
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 5年前关闭。 我打算为Android(2-8个玩家)制作多人实时游戏,并且我认为哪种组织最佳的解决方案是最好的: 使服务器在PC上,客户端在移动设备上,所有通讯都通过服务器(ClientA-> PC SERVER->所有客户端) 使用蓝牙,我还没用过,我也不知道在蓝牙上制作多人游戏很难 使服务器位于其中一台设备上,并与其他设备连接(通过网络,但是我不知道通过NAT解决设备的问题是否很困难?) 其他解决方案?


4
同时使用TCP和UDP是否有意义?
读完之后对于大量数据实时游戏,UDP是否仍然优于TCP?,我想知道同时使用TCP和UDP是否有意义,但是对于不同的事物: TCP,用于发送很少发送的信息,但应确保可靠到达。 例如分数更新,玩家的名字,甚至是游戏世界中灯光的开/关状态。 UDP用于传输不断更新的信息,有时可能会丢失,因为总是有更新的信息出现。 例如位置,旋转度等 这是一个合理的主意吗?可能的缺点是什么? 有更好的方法来解决这个问题吗?

2
如何通过客户端预测处理实时随机运动
我正在构建一个实时多人游戏,该游戏在客户端和服务器上运行相同的“物理”循环。我使用的转向行为“徘徊”是必不可少的随机运动。运行漫游算法时,客户端和服务器生成不同的随机数。 我想知道如何保持自然随机的运动,但使用一些常数来确保客户端和服务器得出相同的结论。

1
我应该如何处理分屏游戏中的声音?
在分屏多人游戏中,声音事件可能会被多个游戏者听到,并且每个游戏者听起来可能有所不同。 例如,玩家可能听到他们驾驶的汽车的声音经过低通滤波。当第一播放器高速驶过时,第二播放器可能会听到引擎声音多普勒偏移的声音。玩家三,从远处观察可能会听到低音量的未经过滤的发动机声音。 在这种游戏中,“显而易见”的方法是只播放所有声音。我可以使用哪些方法对此进行改进,以防止声音过载/“刺耳”,同时使每个播放器的沉浸感最大化?

7
如何使MUD中的永久死亡对玩家来说似乎可以接受并公平?
我已经考虑编写MUD多年了,我有很多想法,我的朋友们认为这真的很酷(这就是我希望能达到的目标-口口相传)。 问题是,我一直想要的一件事是我的朋友和陌生人讨厌:永久死亡。现在,我对此的情感反应是每次内脏的反感。我很确定我是唯一想要这个的人,或者如果我不想要的话,我就是少数。 现在,我想要它的原因是因为我希望玩家的行动至关重要。与许多其他MUD具有一组静态城市状态和社会机构等不同,我希望我的玩家做的事情(如果有的话)能够真正改变这种状况。这包括杀人。 如果您杀死某人,您并没有使他们超时,而是杀死了他们。杀人会怎样?他们走了。他们不会在半小时内回来再跟您聊聊。他们走了。永远。 通过使死亡成为永久性死亡,您使死亡变得无关紧要。如果角色弧线的高潮正在获得超速罚单,那将是相似的。它便宜了。永久死亡可以减轻死亡的负担。 我该如何:1)说服我的玩家(和随机的人!)这实际上是一个好主意?,或者 2)寻找其他方法使死亡和暴力与现实生活中的事情一样重要(当然,在游戏中除外),而没有角色删除?那里有什么替代品?
10 multiplayer  mmo  mud 

2
UDP非阻塞还是单独的线程来接收?
我正在创建一个多人游戏(适用于64位以下的玩家)。我已经决定为网络循环设置一个单独的线程,但是我想知道是否最好创建一个额外的线程来接收UDP或将接收套接字设置为非阻塞(没有额外的线程)。 还是使用其他方法(例如异步套接字)更好?始终欢迎更好的方法!

1
多人平台游戏-服务器上的单个客户端通常是否需要服务器更正?
我目前正在开发一个相当简单的多人平台游戏。我阅读了很多有关隐藏延迟的技术的文章,但是仍然无法理解某些概念。我觉得这个话题非常有趣,喜欢自己尝试一些想法,但我认为询问gamedev stackexchange对于我的问题会更有效。我将尽力描述我的当前状况以及在此过程中出现了什么问题。 现在,我只想让一个播放器与服务器同步。从理论上讲,我假设一个具有客户端预测功能的玩家不需要服务器修正,因为没有外部因素会影响他的动作。因此,我的原型目前只有一个播放器与服务器同步,而没有发送服务器更正。 如果您熟悉游戏网络,我认为您可能会跳过上下文部分,尽管在此过程中我也可能做错了什么。 客户端循环(每帧一次,每〜16.67ms一次) 简化的客户端循环如下所示: 检查本地输入(WASD)并将其打包为操作(例如Type=MoveLeft, Time=132.0902, ID=15)。我们保留打包的操作,以便最终在以后发送它们。此外,我们将所需的动作直接应用于游戏的本地物理模拟。例如,如果我们有一个MoveLeft动作,我们会向玩家的速度向左施加一个力。 检查发送动作。为了防止滥用客户端的带宽,请仅按特定间隔(例如30ms)发送打包的操作。 应用服务器修改。在某个时候,这将处理服务器接收到的增量和更正,并将其应用于游戏的本地模拟。对于此特定问题,不使用。 更新本地物理。在主播放器上运行物理循环。基本上,这是客户端对玩家运动的预测。这会增加玩家的速度引力,将玩家的速度应用到他的位置,修复沿途的碰撞等。我应该指定物理模拟始终以固定的增量秒执行(根据实际增量秒多次调用) 。 我跳过了有关物理学和其他部分的一些特定详细信息,因为我认为这些不是问题所必需的,但是请随时让我知道它们是否与问题相关。 服务器循环(每15ms) 简化的服务器循环如下所示: 处理动作。检查从客户端收到的操作包,并将其应用于服务器物理仿真。例如,我们可以收到5个MoveLeft动作,然后将力施加到速度5次。重要的是要注意,整个动作包是在一个“框架”上执行的,与客户端在动作发生后立即应用它相反。 更新游戏逻辑。我们会更新游戏物理性,移动玩家并修复碰撞等。我们还会打包以后碰巧发送给玩家的所有重要事件(例如,玩家的健康状况下降,玩家死亡等)。 发送更正。如果他们最近改变了,我们会定期(例如,每35毫秒发送一次)将差值发送给其他玩家(例如,玩家的位置,健康状况等)。该部分目前尚未实现,因为我希望单个播放器的模拟在客户端和服务器上给出相同的结果而无需更正,以确保客户端的预测工作正常。 问题 当前的系统在简单的情况下仍然可以正常工作,而令我惊讶的是它在简单的水平移动下给出了非常相似的结果(我相信,这种误差是由于浮点精度误差引起的): 请忽略原型图形。白色矩形=播放器,红色矩形=障碍物,蓝色=背景 但是,在进行时间敏感的动作(例如跳跃和移动到孤立的障碍物附近)之后,出现同步错误: 从理论上讲,我希望两者总是能得到相同的结果,因为没有任何外部因素影响客户的立场。不过,在实践中,我认为我理解问题所在。 由于围绕这样的障碍物跳跃非常取决于玩家的时机,因此将速度应用于位置时的微小变化将对结果产生影响(例如,客户可以及时移开以避免与障碍物,而服务器会在稍后接收到整个动作包时执行该操作,并停留在障碍物上一小段时间,从而更改最终结果)。客户端和服务器处理方式之间的区别主要在于,客户端在发生所有操作时都会执行所有操作,而服务器在接收到它们时会批量执行所有操作。 问题 如此长的语境最终引发了我的问题(感谢您阅读到目前为止):即使只有一个播放器与服务器同步,要求服务器更正是否正常,还是应该在某些对时间敏感的情况下使用某些技术来避免不同步? ? 我已经想到了某些可能的解决方案,其中一些我不太满意: 实施服务器校正。只需假设这是正常行为并纠正错误即可。无论如何,我都想实现它,但是我只是想确保到目前为止所做的事情是可以接受的。 使用提供的客户端时间来应用所需的操作。我想这与滞后补偿类似,需要“及时返回”并检查运动。有点像应用服务器更正,回到过去,然后重新应用下一个操作。我真的不喜欢这个主意。它看起来很复杂,资源昂贵,并且需要信任客户的给定时间(尽管我确实打算真正检查时间是否相对合法)。 向GameDevelopment StackExchange提出一个很棒的新想法,它将解决我的所有问题。 我才刚刚进入游戏网络世界,所以请随时纠正/批评/侮辱上述任何概念,或者提供一些想法/资源,这些资源可以帮助我在“网络奇妙世界”中发展。如果可以在其他地方找到答案,请原谅我,但我失败了。 非常感谢您的宝贵时间。

4
防止多人作弊
我几乎完成了一款小型独立式多人游戏的开发。虽然我打算允许人们在单人游戏中作弊,但在多人游戏中这显然是不可接受的。有谁知道有什么方法可以阻止普通的Joe使用Cheat-Engine之类的东西来修改游戏的某些部分?我目前计划让客户端每隔几秒钟将游戏使用的每个设置文件的MD5哈希值(存储为XML)上载到游戏服务器进行验证,但是我能做些什么来阻止内存编辑器等操作。 ?

3
最佳的点对点游戏架构
考虑一种设置,其中游戏客户端: 拥有非常小的计算资源(移动设备,智能手机) 都连接到通用路由器(LAN,热点等) 用户想在没有外部服务器的情况下玩多人游戏。 一种解决方案是在一台电话上托管一台权威服务器,在这种情况下,它也是一个客户端。考虑到第1点,此解决方案是不可接受的,因为电话的计算资源不足。 因此,我想设计一个点对点架构,该架构将在客户端之间分配游戏的模拟负载。由于第2点,系统的优化不必太复杂;延迟将非常低。每个客户都可以是有关他本人及其周围环境的权威数据来源(例如项目符号)。 设计这种架构的最佳方法是什么?是否存在此类LAN级别对等协议的任何已知示例? 笔记: 这里解决了一些问题,但是那里列出的概念对我来说太笼统了。 安全 我知道没有一台权威服务器是一个安全问题,但是在这种情况下这无关紧要,因为我愿意信任客户端。 编辑: 我忘了提:这将是一个节奏相当快的游戏(射击游戏)。 另外,我已经在Gaffer on Games上阅读了有关网络体系结构的文章。

1
多人空间分割的有效解决方案?
这个问题有点棘手,但我会尽力弄清楚。 可以说我正在构建一个在线游戏(不是MMO规模),但是通过权威的服务器方法可以支持尽可能多的玩家。我想真正的大与世界很多 AI模拟敌人。 我知道一些通过细分空间而不处理不需要处理的东西来节省服务器CPU的策略。我已经按地区划分了世界,这需要加载时间和较小的过渡时间,我认为这对于保持本地(单独或什至有几个朋友)玩游戏时的游戏质量至关重要。我不希望球员出现在一个或两个以上的地区。 问题在于,一个区域可能会变得很大,并且一次模拟了很多NPC。在不影响玩家体验的情况下如何处理?表格中没有像每个区域一台服务器之类的方法。 我主要是在寻找能够容纳成群的敌人,甚至是和平的NPC的数据结构。要最终确定问题,请注意,由于存在车辆,因此车辆在某个区域内的行驶速度相当快,会影响“何时”驶向剔除区域。

1
网络客户端-服务器消息交换和时钟同步帮助
我正在做一个快节奏的物理游戏,它是桌上曲棍球。有两个槌和一个冰球。游戏运行在iPhone / iPad上,我正在通过GameCenter做多人游戏。 这就是网络系统的工作方式。带有匹配标记的客户端将作为服务器进行结算,接受匹配请求的将是客户端。 “服务器”具有物理功能,响应是即时的,客户端也具有物理功能,因此在消息交换之间看起来很流畅。我作为服务器的工作是,我将客户的冰球速度和位置发送给客户端,客户端调整与服务器有关的冰球速度/位置以使其保持同步。否则,物理场将失去同步,并且将其拧紧。 当网络延迟很好,在100毫秒以下时,效果很好,我在客户端获得了流畅的可玩游戏,并且怪异的行为降到了最低。当滞后时间约为150到200毫秒时,就会发生此问题。在那种情况下,发生了我的客户冰球已经碰到边缘和反向的情况,但是它收到了来自服务器的延迟消息,并且它后退了一点,从而引起了对球行为的怪异感觉。 我已经阅读了一些有关它的内容: 傍网示例 单击同步示例 维基百科上的时钟同步 那么,我该如何解决呢?据我所知,最好的选择是使用时间戳在服务器/客户端上进行时钟同步,这样当我收到与时钟相关的延迟消息时,我就忽略了,然后让客户端模拟执行工作。你们同意吗?而且由于我发送的数据不可靠(UDP),所以我可能会收到延迟的消息或混乱的消息。 如果那是最好的方法,我如何实现时钟同步。我已经阅读了有关如何操作的步骤,但我不太了解。 它说: 客户端在“时间请求”数据包上标记当前本地时间,然后发送给服务器。 服务器收到后,服务器会在服务器上盖章并返回 客户端收到后,客户端从发送时间中减去当前时间,然后除以2以计算延迟。它从服务器时间中减去当前时间,以确定客户端-服务器时间增量,并加上半延迟以获取正确的时钟增量。(到目前为止,此algothim与SNTP非常相似) 客户重复步骤1至3五次或更多次,每次都暂停几秒钟。在此期间可能允许其他流量,但应将其最小化,以获取最佳结果。数据包接收的结果将被累积,并以最低延迟到最高延迟的顺序进行排序。中值等待时间是通过从此有序列表中选择中点样本来确定的。 丢弃与中位数相差大约1个标准偏差的所有样本,并使用算术平均值对其余样本取平均值。 按照这个例子,我会有这个: 让我们假装游戏已经加载并且我的客户端时间现在是0,所以我向服务器发送我的时间是0。 消息需要150毫秒才能到达服务器,但是服务器的时钟已经启动,并且比客户端提前1秒。服务器收到消息后,时间将是:1.15并将该时间发送给客户端,我们还好吗?假设我们的滞后时间恒定为150ms。 现在客户端接收时间1.15,并从发送的时间中减去当前时间,然后除以2以计算延迟。Wich为:0.3-0 = 0.3 / 2-> 150ms。 它从服务器时间中减去当前时间以确定客户端-服务器时间增量,并添加半延迟以获取正确的时钟增量: 客户端时间:0.3服务器时间1.15 0.3-1.15 = .85 +等待时间(.15)= 1 如何同步?我想念什么? 这是我第一次玩多人游戏和网络游戏,所以我有点困惑。 谢谢。

1
游戏引擎设计:多人和侦听服务器
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我的游戏引擎现在包括一个有效的单人游戏部分。我现在开始考虑如何做多人游戏部分。 我发现很多游戏实际上没有真正的单人游戏模式,但是当单独玩游戏时,您实际上也在托管本地服务器,并且几乎所有内容都像在多人游戏中一样运行(除了数据包可以通过通过替代路线以获得更好的性能) 我的引擎将需要进行重大重构以适应此模型。将有三种可能的模式:专用客户端,专用服务器和客户端-服务器(侦听模式) 在游戏行业中,监听服务器模型多久使用一次? 它的(缺点)有什么优点? 我还有什么其他选择?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.