“ Akka-Streams”中“ extrapolate”的用例是什么?

时间:2019-03-17 17:14:27

标签: scala akka akka-stream

我刚刚在conflate中尝试过extrapolateakka-streams

由于conflate对我来说完全有意义,所以我没有extrapolate的用例。

为什么我们不应该为下游增加更多的工作-当上游不需要的时候?

在Scala文档中:

  

允许较快的下游进程独立于较慢的上游进程

1 个答案:

答案 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
}