scala - `Akka-Streams` 中的 `extrapolate` 的用例是什么?
问题描述
我刚试过conflate
并extrapolate
在akka-streams
.
对我conflate
来说完全有道理,我没有得到extrapolate
.
为什么我们要为下游增加更多的工作——当上游不需要的时候?
来自 Scala 文档:
允许较快的下游独立于较慢的上游进行。
解决方案
举一个例子:
游戏开发
在视频游戏中,通常至少有两个“循环”:一个逻辑/游戏循环和一个渲染循环。通常,游戏循环的速率(“滴答速率”)比渲染循环的速率(“帧速率”)慢。例如,一个逻辑滴答可能每秒发生 10 次,但帧速率通常应至少为每秒 60 帧。为了在滴答之间渲染一些东西,游戏开发人员使用外推法或插值法。正如您可能已经猜到的那样,外推函数非常适合外推。这是一个滴答率为每秒 10 个滴答且没有帧速率限制的示例:
Source.tick(0.millis, 100.millis, 0)
.scan(intialGameState) { (g, _) => tick(g) }
.extrapolate(extrapolateFn)
.runForeach(render)
现在extrapolateFn
只需要返回一个迭代器,它可以按需提供推断的游戏状态:
def extrapolateFn(g: GameState) = Iterator.continually {
// Compute how long it has been since `g` was created
// Advance the state by that amount of time
// Return the new state
}
推荐阅读
- numpy - 一维上有多个softmax?
- c - 如何在 c 中编写一个函数 char* 来返回按长度排序的单词?
- javascript - 我正在尝试将多个图像下载为 zip 文件,但使用 javascript 获取空文件夹
- react-native - React-Native - 无法使用 GradleScopeCompileServices.configure() 配置服务
- data-conversion - 如何将线性刻度转换为对数刻度
- python - 为什么我的表单验证在 django 中不起作用
- qt-creator - QT:“这个文件不是任何项目的一部分”
- google-cloud-platform - 使用 dtmf 响应从对话流中响应(播放数字)
- c - 我想确定我的代码中最常出现的两个字母组合
- python - Python argparse 为空