代码之家  ›  专栏  ›  技术社区  ›  pme

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

  •  0
  • pme  · 技术社区  · 7 年前

    conflate extrapolate akka-streams .

    作为 合流 对我来说完全有意义,我不明白 外推 .

    为什么我们要为下游增加更多的工作——而上游却不需要?

    从Scala文档:

    允许更快的下游独立于较慢的上游前进。

    0 回复  |  直到 7 年前
        1
  •  2
  •   Brian McCutchon    7 年前

    举个例子:

    在视频游戏中,通常至少有两个“循环”:逻辑/游戏循环和渲染循环。通常,游戏循环的速率(“嘀嗒速率”)比渲染循环的速率(“帧速率”)慢。例如,逻辑勾号可能每秒出现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
    }
    
    推荐文章