该问题特定于具有物理和视觉成分(例如,游戏)的反应性香蕉和实时模拟.
根据Fix Your Timestep!设置游戏循环的理想方式(假设物理需要可重复),你需要在帧之间固定的时间步长.在考虑了许多真正的并发症之后,作者到达了这个游戏循环:
double t = 0.0;
const double dt = 0.01;
double currentTime = hires_time_in_seconds();
double accumulator = 0.0;
State previous;
State current;
while ( !quit )
{
double newTime = time();
double frameTime = newTime - currentTime;
if ( frameTime > 0.25 )
frameTime = 0.25; // note: max frame time to avoid spiral of death
currentTime = newTime;
accumulator += frameTime;
while ( accumulator >= dt )
{
previousState = currentState;
integrate( currentState, t, …Run Code Online (Sandbox Code Playgroud) 我已经在Stack Overflow上查看了一些问题的答案,试图在使用Reactive Banana库时找到我的问题的解决方案.所有答案都使用了一些我不太了解的'mapAccum'的魔法.查看API文档,我发现的是"高效组合accumE和" accumB.这不是很有帮助.
似乎这个函数可以用来比较Behavior两个连续事件时a的值,这是我想要做的.但我不清楚如何做到这一点.
mapAccum工作究竟如何?