我刚刚在conflate
中尝试过extrapolate
和akka-streams
。
由于conflate
对我来说完全有意义,所以我没有extrapolate
的用例。
为什么我们不应该为下游增加更多的工作-当上游不需要的时候?
在Scala文档中:
允许较快的下游进程独立于较慢的上游进程
答案 0 :(得分:1)
例如:
在视频游戏中,通常至少有两个“循环”:逻辑/游戏循环和渲染循环。通常,游戏循环的速率(“滴答速率”)比渲染循环的速率(“帧速率”)慢。例如,逻辑滴答可能每秒发生10次,但帧速率通常应至少为每秒60帧。为了在两次滴答之间呈现某种效果,游戏开发人员可以使用extrapolation or interpolation。您可能已经猜到了,外推函数非常适合外推。这是一个每秒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
}