ゲームのようなプロジェクトにreactive-banana
and sdl2
(このグルー ライブラリを使用) を使用しています。は、「マウスのBehavior
絶対位置」およびBehavior
「マウスの相対位置」(別名マウスの動き) に対して作成されます。FRP を使用しない場合、これはうまく機能しますが、FRP を使用すると、「相対的なマウスの位置」が問題になります。少量のデータしか通過しないようです。これは、基礎となる「SDL イベント」( a で表すBehavior
) が tick とうまく一致しないために発生すると思われEvent
ます。
したがって、現在のティックでのマウスの位置を前のティックでの位置と比較するだけで、自分のマウスの動きを計算したいと考えています。これで問題が解決するかどうかはわかりませんが、希望はあります:)
まず第一に、私はそれにアプローチする方法に迷っています:State
モナド、または 、IORef
またはreactive-banana
別の手段を提供しますか?
現在持っているコードの一部を抜粋します。
makeNetwork :: GraphicsData -> SDLEventSource -> MomentIO ()
makeNetwork gd sdlEventSource = mdo
tickE <- tickEvent sdlEventSource
mouseMovementB <- fromPoll SDL.getRelativeMouseLocation
mousePositionB <- fromPoll SDL.getAbsoluteMouseLocation
let mousePositionE = mousePositionB <@ tickE
mouseMovementE = mouseMovementB <@ tickE -- this yields flaky data
-- ... the rest of the network description left out ...
上で説明したように、現在の(として知られている) と以前の の値で表現mouseMovementE
したいと思います。mousePositionB
tickE
mousePositionE
mousePositionE
tickE
どんな助けでも大歓迎です!