gpt4 book ai didi

sockets - 实现实时多人游戏存在什么样的问题

转载 作者:可可西里 更新时间:2023-11-01 02:29:50 25 4
gpt4 key购买 nike

我有一些使用插槽制作多人回合制游戏的经验,但我从未尝试过实时 Action 游戏。我需要处理什么样的额外问题?我是否需要保留玩家行为的历史记录,以防落后的玩家过去做过某事?我真的需要使用 UDP 数据包还是 TCP 就足够了?还有什么?

我还没有真正决定要做什么,但是为了这个问题的目的,你可以考虑一个 10 人的 2D 游戏,X Y 运动。

最佳答案

  • “客户端服务器”或“点对点”或介于两者之间的东西:哪台计算机有权决定哪些游戏操作。

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

当然,您可以从“每个客户都对‘他们的’对象拥有权限”的模型开始,而忽略作弊问题(在很多情况下都可以)。但是现在,如果该客户端退出,或者甚至“在跟上模拟方面落后了一点”,您很容易对游戏模拟产生巨大影响——实际上,每个玩家的游戏最终都会/感受到滞后或表现不佳的客户端,其形式要么是等待滞后的客户端 catch ,要么是他们控制的游戏状态不同步。

  • “同步”或“异步”

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

使用异步解决方案,游戏状态当局只需以一定的频率将整个状态广播给所有其他客户端。客户端获取该数据并将其放入他们的游戏状态(并且通常会进行一些简单的推断,直到他们获得下一次更新)。这就是“udp”成为可行选项的地方,因为您每隔约 1 秒左右就会向整个游戏状态发送垃圾邮件,丢弃这些更新的一部分是无关紧要的。对于游戏状态相对较少的游戏(地震、魔兽世界),这通常是最简单的解决方案。

关于sockets - 实现实时多人游戏存在什么样的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/90423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com