如果说局部性是一个核心原理,那么可预测性推论就是实现的核心基础。为什么呢?理由很简单,如果一个角色的行为能够在1秒之前被预测,那么客户端与服务端的网络延时可以容忍在1秒。一般洲际之间的网络在200-300毫秒之间,因此,跨洲际的单一世界的实现就成为了可能。
这个可预测推论是否正确呢,其实我们通过观察可以得到,推论本身是正确的,唯一不正确的是预测的时间范围。我们知道当客户端按下了攻击键,那么在接下来的若干毫秒内,必然是攻击动作。我们算下,从A按下攻击键到B作出防守动作,中间需要30毫秒,A客户端接收到攻击键时,在后面几十毫秒必然要播放攻击动作,而B接收到A的攻击键,也要播放相应的攻击动作,然后做出防守动作。这2个攻击和防守的时间间隔为30毫秒,这30毫秒对人类的反映速度来说完全可以忽略不计,但是,我们接收到攻击键完全可以预测到后续的30毫秒的过程。虽然这30毫秒是微不足道的,却进一步拉近了单一世界2个客户端之间的网络时延。
我们知道,动画每秒24帧就比较顺畅,也就是说动画时延能够容忍在40毫秒。而每个人每秒的击键动作一般4-5次,很少会达到16次的。实际上击键动作对网络时延的容忍度更高。当然,如果动画每秒帧数越多,将会更顺畅的。动画帧数以及击键动作的时延是用来计算网络时延的最大容忍度。
更大的预测性还可以出现在跑动过程中,实际上你一直按着方向键不动,那么根据速度和加速度,很大可能性可以预测你在1秒之后的空间位置。实际1秒是很短的时间,但是对于网络时延来说,却能干很多事情。
最让我们担心的是,在剧烈的短兵相接中,比如战士和战士的互殴,近距离的攻击,击键动作很短,但上面说过了,正常每秒击键动作少于16次,想来对网络时延还是可以容忍的。
实际上,上面的预测行为是触发式的,还有学习式或者推断式的,这个好像涉及到人工智能的领域,其实反而没有太大的作用。我们知道预测的范围越长,他的准确率越低,也失去了预测价值。在计算机内存命中算法中,也使用类似的预测算法,值得借鉴。
原文链接:https://www.f2er.com/javaschema/287797.html