By adding an extra frame of input delay, you can compensate for a sing的简体中文翻译

By adding an extra frame of input d

By adding an extra frame of input delay, you can compensate for a single frame of dropped data, provided that you include multiple frames worth of input data per packet. In the image above you can see that, as suggested above, each input is sent multiple times, once to the first frame received and again on the one after.As you can see, the Frame+1 packet gets lost to the dimensional cleft, but because input delay is set to 2, the other player’s Frame+2 is using the input from +0. One frame later it will receive a second packet, containing Frame+1 and Frame+2’s data, allowing Frame+3 to proceed as normal with no interruptions.Simple fix for a simple problem, but there’s a big, big gotcha here that needs to be understood.simple graph showing the effect of frames being skippedIf one game is running slower than another, dropping a frame here or there, it cannot be treated the same as if it were a packet loss. This is because you lose that bonus extra buffer of delay you added to compensate for it, and get effectively nothing of value out of it. Obviously, this isn’t desirable.This leads to the most important rule of this sort of network code: The goal is to maintain complete synchronization with the other system. This includes performance issues. If one has a drop, this drop must be reflected in the other as well. Always. Anything else will lead to a desynchronization of the intended behavior.In an input delay system, you can handle this by knowing both the necessary input delay and the current amount. When a packet is received you can check to make sure that it matches the necessary input delay value from the current frame, and if that is not synchronized, then the code skips the current frame in order to keep synchronization across systems.This is different from waiting for input! The process becomes this:When a packet is received, test to see if the frame for the data given matches the minimal input delay, wait if there was a drop on the other side.When it's time to run the game, the input is necessary, so test with the real input delay value to make sure that you have the data for this frame.This simple model can compensate for single packet losses trivially and still retains full timing synchronization across systems. You can periodically send pings to determine what the minimal input delay should be.simple graph showing rollbacks in actionBut, as we all know, input delay models suck. What we really want is rollbacks, which is the model used by GGPO, Supercade, and RollCaster. This is a system where it runs the game ahead of the opponent’s input, and then when new input data is received it ‘rolls back’ the game and reruns it with the new input. Think of it like retconning things that didn’t really happen.This graph suspiciously looks very similar to our input delay model. That’s because it’s basically the same except that we’re waiting for input data from a different frame! In this case, the current frame minus the rollback amount determines the frame that we acquire data from.You might notice this is parallel here: Input delay is done by adding to the frame before it is sent, rollbacks are done by subtracting from the current frame before getting the input. This way, not only can you mix the two as you see fit, as long as the input delay and amount of rollbacks sum to at least the necessary amount of input delay, the performance will be smooth and clean. Magic!I’m not going into the details of writing the rollbacks themselves into the game engine in this article, but assuming you have that part, that is literally the only change you need to make in order to make them work.But of course, if you have rollbacks, you have what is fundamentally a partially asynchronous networking model. This means you can do some extra magic tricks on top that you couldn’t do before!simple graph showing how rollbacks hide packet lossBecause of the way the model works, if you’re willing to rollback a few more frames than is set, you no longer need any sort of extraneous input buffer to keep everything running along smoothly. Instead you can just keep the game running like normal and then do a couple extra frames of rollback when the data is finally received.Obviously you want to put a reasonable limit on this so you don’t end up one second out without the correct input. RollCaster allows only one extra frame of rollback before forcing a block for input and forcing resynchronization. GGPO will run along for quite awhile as long as it can keep verifying that both systems are running at the same timing.And if you’re wondering, the rule from above regarding keeping synchronization with the other system’s performance must be upheld. If you detect that the other computer is running slowly and has dropped a frame, then you must also wait a frame to keep synchronization, even in a rollback setup. If you don’t do this the two computers will slowly drift out of t
0/5000
源语言: -
目标语言: -
结果 (简体中文) 1: [复制]
复制成功!
通过增加一个额外的输入延迟帧,您可以补偿丢帧的单个帧,前提是每个数据包包含多个帧的输入数据。在上面的图像中,您可以看到,如上所示,每个输入被发送多次,一次发送到接收到的第一帧,另一次发送到下一帧。<br><br>如您所见,Frame + 1数据包丢失了尺寸裂缝,但是由于输入延迟设置为2,因此其他玩家的Frame + 2使用的是+0的输入。一帧之后,它将接收第二个数据包,其中包含Frame + 1和Frame + 2的数据,从而使Frame + 3正常进行而不会中断。<br><br>简单解决一个简单的问题,但是这里有一个很大的陷阱需要理解。<br><br>显示跳过帧影响的简单图形<br><br>如果一个游戏的运行速度比另一个游戏慢,在这里或那里丢了一帧,就不能将其视为丢包。这是因为您失去了为补偿它而增加的额外延迟延迟缓冲,并且实际上没有任何价值。显然,这是不可取的。<br><br>这导致了这种网络代码的最重要规则:目标是保持与其他系统的完全同步。这包括性能问题。如果一个下降,那么这个下降也必须反映在另一个下降中。总是。其他任何事情都会导致预期行为的不同步。<br><br>在输入延迟系统中,您可以通过了解必要的输入延迟和当前量来处理此问题。收到数据包后,您可以检查以确保它与当前帧中的必要输入延迟值匹配,如果未同步,则代码会跳过当前帧以保持系统间的同步。<br><br>这与等待输入不同!流程如下:<br><br>接收到数据包后,测试以查看给定数据的帧是否与最小输入延迟相匹配,然后等待另一端是否有丢弃。<br>当需要运行游戏时,输入是必需的,因此请使用实际输入延迟值进行测试,以确保您具有该帧的数据。<br>这个简单的模型可以微不足道地补偿单个数据包丢失,并且仍然保持整个系统之间的完整时序同步。您可以定期发送ping以确定最小输入延迟。<br><br>显示活动回滚的简单图形<br><br>但是,众所周知,输入延迟模型很糟糕。我们真正想要的是回滚,这是GGPO,Supercade和RollCaster使用的模型。这是一个系统,它在对手输入之前运行游戏,然后在收到新输入数据时“回滚”游戏并使用新输入重新运行游戏。将其视为重新整理未真正发生的事情。<br><br>该图看起来与我们的输入延迟模型非常相似。那是因为它基本上是相同的,只是我们正在等待来自不同帧的输入数据!在这种情况下,当前帧减去回滚量将确定我们从中获取数据的帧。<br><br>您可能会注意到这里是平行的:输入延迟是通过在发送之前在帧中添加来完成的,回滚是通过在获取输入之前从当前帧中减去来完成的。这样,您不仅可以按照自己的意愿将两者混合使用,只要输入延迟和回滚量之和至少等于必要的输入延迟量,性能就会变得平滑而干净。魔法!<br><br>在本文中,我不会讨论将回滚本身写入游戏引擎的详细信息,但是假设您拥有回滚部分,那么从字面上看,这是使它们正常工作所需的唯一更改。<br><br>但是,当然,如果您有回滚,那么从根本上讲就是部分异步的网络模型。这意味着您可以在以前无法做的事情上做一些额外的魔术!<br><br>显示回滚如何隐藏数据包丢失的简单图形<br><br>由于该模型的工作方式,如果您愿意回滚比设置的帧数更多的帧,则不再需要任何无关紧要的输入缓冲区来保持一切顺利进行。相反,您可以使游戏保持正常运行,然后在最终收到数据后再进行一些额外的回滚。<br><br>显然,您希望对此设置一个合理的限制,这样一来,如果没有正确的输入,您就不会浪费一秒钟的时间。在强制输入块和强制重新同步之前,RollCaster仅允许额外的一帧回滚。GGPO可以运行很长时间,只要它可以继续验证两个系统是否在同一时间运行即可。<br><br>而且,如果您想知道,那么必须遵循上述与其他系统的性能保持同步的规则。如果您检测到另一台计算机运行缓慢并且丢了一帧,则即使在回滚设置中,也必须等待一帧以保持同步。如果您不这样做,则两台计算机将缓慢地移出
正在翻译中..
结果 (简体中文) 2:[复制]
复制成功!
通过添加额外的输入延迟帧,您可以补偿单个帧丢弃的数据,前提是每个数据包包含多个帧的输入数据。在上面的图像中,您可以看到,如上文所示,每个输入被发送多次,一次发送到收到的第一帧,然后再次发送到第一帧。<br><br>如您所看到的,Frame+1 数据包将丢失到尺寸裂口,但由于输入延迟设置为 2,其他玩家的 Frame+2 使用来自 |0 的输入。一帧后,它将收到第二个数据包,其中包含帧+1和帧+2的数据,允许帧+3正常进行,而不会中断。<br><br>简单的修复一个简单的问题, 但有一个大, 大的 gotcha 在这里, 需要理解。<br><br>显示跳过帧效果的简单图形<br><br>如果一个游戏运行速度比另一个游戏慢,将帧丢弃在这里或那里,则无法像数据包丢失那样对待它。这是因为你失去了额外的延迟缓冲,你添加,以弥补它,并有效地得到任何价值。显然,这是不可取的。<br><br>这导致了这种网络代码最重要的规则:目标是保持与其他系统完全同步。这包括性能问题。如果一个有一个下降,这个下降也必须反映在另一个。总是。任何其他操作都将导致预期行为的取消同步。<br><br>在输入延迟系统中,可以通过了解必要的输入延迟和当前金额来处理此问题。收到数据包后,可以检查以确保它匹配当前帧中必要的输入延迟值,如果该值未同步,则代码将跳过当前帧,以便保持系统之间的同步。<br><br>这与等待输入不同!该过程变为:<br><br>收到数据包时,测试给定数据的帧是否匹配最小输入延迟,等待另一侧是否有丢弃。<br>当需要运行游戏时,输入是必要的,因此使用实际输入延迟值进行测试,以确保您拥有此帧的数据。<br>这种简单的模型可以小而琐碎地补偿单个数据包损失,并且仍然保留跨系统的完整计时同步。您可以定期发送 ping 来确定最小输入延迟应该是什么。<br><br>显示行动回滚的简单图形<br><br>但是,我们都知道,输入延迟模型很烂。我们真正想要的是回滚,这是GGPO、Supercade和滚播使用的模型。这是一个系统,它运行游戏之前的对手的输入,然后当收到新的输入数据,它"回滚"游戏,并重新运行它与新的输入。把它想得像重新确认一些没有真正发生的事情。<br><br>此图可疑地看起来非常类似于我们的输入延迟模型。这是因为它基本上是相同的, 除了我们在等待来自不同帧的输入数据!在这种情况下,当前帧减去 rollba
正在翻译中..
结果 (简体中文) 3:[复制]
复制成功!
通过添加额外的输入延迟帧,您可以补偿单个丢弃数据帧,前提是每个数据包包含多个输入数据帧。在上面的图像中,您可以看到,如上所述,每个输入都会发送多次,一次发送到接收到的第一帧,另一次发送到接收到的第二帧。<br>如您所见,帧+1数据包丢失到维度裂缝中,但是由于输入延迟设置为2,所以另一个播放器的帧+2使用的是来自+0的输入。一帧之后,它将接收第二个数据包,其中包含帧+1和帧+2的数据,允许帧+3正常进行,没有中断。<br>一个简单问题的简单解决方法,但是这里有一个很大的问题需要理解。<br>显示跳过帧效果的简单图形<br>如果一个游戏运行得比另一个慢,在这里或那里丢帧,就不能像丢包一样对待它。这是因为你失去了额外的延迟补偿,而实际上没有得到任何有价值的东西。显然,这是不可取的。<br>这就引出了这类网络代码最重要的规则:目标是保持与其他系统的完全同步。这包括性能问题。如果一个有下降,这个下降也必须反映在另一个。总是。其他任何事情都会导致预期行为的不同步。<br>在输入延迟系统中,您可以通过了解必要的输入延迟和当前量来处理此问题。当接收到数据包时,您可以检查以确保它与当前帧的必要输入延迟值匹配,如果该值不同步,则代码跳过当前帧以保持系统间的同步。<br>这与等待输入不同!过程如下:<br>当收到一个数据包时,测试给定数据的帧是否与最小输入延迟相匹配,等待另一侧是否有丢弃。<br>当运行游戏的时候,输入是必要的,所以用实际的输入延迟值来测试,以确保你有这个帧的数据。<br>这个简单的模型可以很容易地补偿单个数据包的丢失,并且仍然在系统间保持完全的定时同步。您可以定期发送ping来确定最小输入延迟应该是多少。<br>显示回滚操作的简单图<br>但是,众所周知,输入延迟模型很糟糕。我们真正想要的是回滚,这是GGPO、Supercade和RollCaster使用的模型。这是一个在对手输入之前运行游戏的系统,当收到新的输入数据时,它“回滚”游戏并用新的输入重新运行。把它想象成是对那些没有真正发生的事情的改造。<br>这个图看起来很像我们的输入延迟模型。这是因为它基本上是一样的,只是我们在等待来自不同帧的输入数据!在这种情况下,当前帧减去回滚量决定了我们从中获取数据的帧。<br>您可能注意到这是并行的:输入延迟是通过在发送帧之前添加到帧来完成的,回滚是通过在获取输入之前从当前帧中减去来完成的。这样,不仅可以随心所欲地将两者混合,只要输入延迟和回滚量之和至少达到所需的输入延迟量,性能就会平稳而干净。魔法!<br>在本文中,我不会详细介绍将回滚本身写入游戏引擎的细节,但假设您拥有这一部分,这实际上是您需要进行的唯一更改,以使它们正常工作。<br>当然,如果您有回滚,那么您就有一个基本的部分异步网络模型。这意味着你可以在上面做一些你以前做不到的额外魔术!<br>显示回滚如何隐藏数据包丢失的简单图<br>由于模型的工作方式,如果您愿意回滚比设置的帧多一些的帧,则不再需要任何类型的无关输入缓冲区来保持一切顺利进行。相反,你可以保持游戏正常运行,然后在最终收到数据时再进行几帧回滚。<br>很明显,您希望对此设置一个合理的限制,这样就不会在没有正确输入的情况下出现一秒钟。RollCaster只允许在强制块输入和强制重新同步之前进行一个额外的回滚帧。GGPO将运行相当长的一段时间,只要它能够不断验证两个系统在同一时间运行。<br>如果你想知道,上面关于保持与另一个系统性能同步的规则必须坚持。如果您检测到另一台计算机运行缓慢并且丢弃了一个帧,那么您还必须等待一个帧来保持同步,即使在回滚设置中也是如此。如果你不这样做,这两台计算机就会慢慢地从t中消失
正在翻译中..
 
其它语言
本翻译工具支持: 世界语, 丹麦语, 乌克兰语, 乌兹别克语, 乌尔都语, 亚美尼亚语, 伊博语, 俄语, 保加利亚语, 信德语, 修纳语, 僧伽罗语, 克林贡语, 克罗地亚语, 冰岛语, 加利西亚语, 加泰罗尼亚语, 匈牙利语, 南非祖鲁语, 南非科萨语, 卡纳达语, 卢旺达语, 卢森堡语, 印地语, 印尼巽他语, 印尼爪哇语, 印尼语, 古吉拉特语, 吉尔吉斯语, 哈萨克语, 土库曼语, 土耳其语, 塔吉克语, 塞尔维亚语, 塞索托语, 夏威夷语, 奥利亚语, 威尔士语, 孟加拉语, 宿务语, 尼泊尔语, 巴斯克语, 布尔语(南非荷兰语), 希伯来语, 希腊语, 库尔德语, 弗里西语, 德语, 意大利语, 意第绪语, 拉丁语, 拉脱维亚语, 挪威语, 捷克语, 斯洛伐克语, 斯洛文尼亚语, 斯瓦希里语, 旁遮普语, 日语, 普什图语, 格鲁吉亚语, 毛利语, 法语, 波兰语, 波斯尼亚语, 波斯语, 泰卢固语, 泰米尔语, 泰语, 海地克里奥尔语, 爱尔兰语, 爱沙尼亚语, 瑞典语, 白俄罗斯语, 科西嘉语, 立陶宛语, 简体中文, 索马里语, 繁体中文, 约鲁巴语, 维吾尔语, 缅甸语, 罗马尼亚语, 老挝语, 自动识别, 芬兰语, 苏格兰盖尔语, 苗语, 英语, 荷兰语, 菲律宾语, 萨摩亚语, 葡萄牙语, 蒙古语, 西班牙语, 豪萨语, 越南语, 阿塞拜疆语, 阿姆哈拉语, 阿尔巴尼亚语, 阿拉伯语, 鞑靼语, 韩语, 马其顿语, 马尔加什语, 马拉地语, 马拉雅拉姆语, 马来语, 马耳他语, 高棉语, 齐切瓦语, 等语言的翻译.

Copyright ©2024 I Love Translation. All reserved.

E-mail: