我正在考虑制作网络游戏.我对此有点新意,并且已经遇到了很多问题,试图为航位推算和网络延迟制定一个好的计划,所以我很想看到关于这个主题的一些好的文献.我将描述我考虑过的方法.
最初,我只是将玩家的输入发送到服务器,在那里进行模拟,并向所有玩家广播游戏状态的变化.这使作弊变得困难,但是在高延迟下,事情有点难以控制,因为你不会立即看到自己行为的结果.
这篇GamaSutra文章提供了一个解决方案,通过在客户端上进行模拟,可以节省带宽并使本地输入看起来更流畅,但它似乎可以防止窗外作弊.此外,当玩家开始操纵环境,推动岩石之类的时候,我不知道该怎么办.这些先前中立的对象将暂时成为客户端发送PDU所需的对象,或者可能是多个玩家同时执行的对象.谁的PDU会赢?每个玩家何时停止双重跟踪物体(与死亡计算版本进行比较)?天堂禁止两名球员参加相扑比赛(例如开始互相推进).
这个gamedev.net位显示gamasutra解决方案不合适,但描述了一种不能真正修复我的协作巨石推动示例的不同方法.我发现的大多数其他东西都是针对射手的.我希望看到一些更适合像SNES Zelda这样的游戏的东西,但需要更多的物理/动力.
注意:我不是在这里询问物理模拟 - 其他图书馆都有这个.尽管存在网络延迟,但仍然可以使游戏平稳且反应灵敏
Cristian San.. 21
看看Valve在源引擎中如何做到这一点:http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
如果是第一人称射击游戏,您可能需要深入研究他们提到的一些主题,例如:预测,补偿和插值.
看看Valve在源引擎中如何做到这一点:http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
如果是第一人称射击游戏,您可能需要深入研究他们提到的一些主题,例如:预测,补偿和插值.
我在Glenn Fiedler 找到了这个网络物理博客文章,下面的回复/讨论更加令人敬畏.这是相当漫长的,但值得一试.
无论何时在现代游戏物理模拟(即车辆或刚体动力学)中接收到客户输入,服务器都无法跟上重复模拟.因此,服务器在服务器之前命令所有客户端延迟+抖动(时间),以便在服务器需要之前所有收到数据包都进入JIT.
他还概述了如何处理您要求的所有权类型.他在GDC上展示的幻灯片真棒!
菲德勒先生本人(以及其他人)表示,这种算法不具备防欺骗能力.这不是真的.与传统的客户端/服务器预测相比,该算法同样容易或难以利用(参见@CD Sanchez答案中有关传统客户端/服务器预测的文章).
要绝对清楚:服务器不容易作弊只是因为它及时接收网络物理定位(而不是像传统预测那样迟到x毫秒).客户端根本不受影响,因为他们都以与传统预测完全相同的延迟接收对手的位置信息.
无论您选择哪种算法,如果您要发布主要标题,您可能需要添加作弊保护.如果你是,我建议为stooge机器人添加加密(例如,一个XOR流密码,其中"密钥流由伪随机数生成器生成")和简单的完整性检查裂缝.一些开发人员还实现算法来检查二进制文件是否完整(以降低破解风险)或确保用户没有运行调试器(以降低开发破解的风险),但这些更有争议.
如果你只是制作一个较小的独立游戏,这可能只有几千个玩家玩,不要打扰实施任何反作弊算法,直到1)你需要它们; 或2)用户群增长.