当前位置:五三书院>其他类型>美利坚:游戏制作教父> 第527章 无解的问题
阅读设置 (推荐配合 快捷键[F11] 进入全屏沉浸式阅读)

设置X

第527章 无解的问题(1 / 3)

子弹够不够,命中情况如何,对方的血量还有多少?

等到服务器把这些东西都搞清楚,这才会把数据回传给客户端。

如果客户端这边执行的东西被服务器否定了,那再尝试修正。

如果服务端说目标死掉了,客户端才会喧染出对方似掉的动画效果。

“啊!是的,应该如此!”

卡马克眼神一亮。

这种实时感才是联机最欠缺的东西。

让客户端尽可能哄着玩家先玩着,剩下的事情由服务器慢慢想办法解决。

想到这儿,他便立马要离席跑去开工。

但林立新立马喊住了他。

“别急啊,这才哪到哪,这只是个第一重保险。”

林立新直接伸手在白板上抹出一片空白,搓了搓手柄油墨蹭掉,这才继续道,  “这样做虽然解决了实时响应的问题,但却会让《quake》出现一个全新的bug。”

他在上面写下两行字。

【favor the shooter】(满足射击者)

【responsiveness】(响应性)

这两种观念,就映射了在fps这条道路上的两类完全不同的优化思路。

刚才设计的这个客户端预测,其实就是非常典型的响应性设计。

响应性设计的主张是:当玩家执行了一个操作时,他应该立刻得到反馈。

“你们看,这种设计最大的好处是什么?当然是符合玩家的直觉,操作干脆干练,简直就象是在玩本地游戏,完全感受不到联机的延迟。”

林立新在写着‘响应性’的位置点了点。

“可它并不是完美的,它最大的问题就是打不中人。”

卡马克眨巴眨巴眼,等待着林立新继续说下去。

因为现在这两条放在一起,完全是在左脑搏击右脑。  刚才才说了客户端预测不能干预服务器判断,这样才能确保一致性和足够公平。

现在却又要把打不中人拿出来说。

“预测错误导致的回弹、子弹数量不对导致的只能听见枪响但没有开枪的情况、打中了人却没打中”

林立新如数家珍地一条一条罗列着现在联机系统的罪状,

“为此,我们需要引入第二条优化策略。”

他的手向上移动,点在【favor the shooter】那行上,

“我们要在服务器处理信息时,稍微偏心一点,偏向射击者。”

“可那样不是又会导致”

山姆开口道,不过还没说完,便被林立新给打断了。

“别急,我不是说让射击者完全本地化处理,命中与否仍然是服务器负责的。”

“”

这下不管是山姆还是卡马克都没招了,静静等着林立新给出最终的答案。  “g pensation(延迟补偿)。”

林立新解释道,

“预测能解决手感,而延迟补偿解决的是公平。”

他在板子上画了三个方块,让其中两个通过一个箭头连接到最上面那个。

显而易见的,这是个非常简略的客户端/服务端模型。

“你看,假设我们的延迟是100毫秒,那我们在游戏中看到的画面,实际上就是100毫秒以前的内容,而我们如果在这个时候开枪,打中的也是100毫秒以前的对手。”

这就坏菜了。

理论上来说,如果玩家是绝对精准地瞄准着目标进行开火,在这种情况下是永远都不可能击中正在移动的目标的。

除非这位高手能够牛逼到精准地推算出自己的实时延迟,并根据对方现在的运动状态、心理情况、战术策略等各种因子,综合推算出对方的下一步动向,并提前瞄准映射的位置。

但这显然是不可能的。

职业选手最多也就是计算个提前量打跟枪。

真正的完全预测根本就不是人脑能解决的。  哪怕是计算机也不可能完整计算出来。

“呐,问题就在这儿了,这样一来,玩家便会有种明明开枪了、也瞄准了、也打中了,甚至目标脑袋都飙血了,却毛事都没有,一点血皮子都没掉的诡异错位感。”

“而解决这个问题的办法也非常简单。”

林立新重新伸手,写下一个单词。

【red】

当然不是以撒里的那种,不过也的确是差不多的思想。

“red(回滚),确切地说是服务器回滚。”

“服务器不再实时进行计算,而是保存一份包含所有玩家最近几百毫秒以内的所有快照。”

上一章 目录 +书签 下一页