我的网络如下:
ePhysics :: Event t ()
bPlayerForce :: Behavior t (Double,Double)
bPlayerPosition :: Behavior t (Double, Double)
从计时器反复触发 ePhysics
我在定义bPlayerPosition
方面遇到了问题。我打算从(0,0)
开始,每当ePhysics
被触发时,bPlayerPosition
将使用bPlayerForce
作为参数重新计算。
问题在于,为了指定我需要使用accumB
/ stepper
的初始值,但它们只适用于事件,而我无法从{获取力值{1}}因为只有行为才能获得其他行为的价值(使用bPlayerForce
)。
另一种方法是使用<*>
但是我没有初始值,所以它变成了无意义的无限递归:
<*>
我有3个问题:
let bPlayerPosition = pure calcPosition <*> bPlayerForce <*> bPlayerPosition
的行为中获取价值?比如,<*>
或映射事件?从一开始就不能一直与我联系的问题。答案 0 :(得分:5)
apply
组合子(也称为<@>
)及其变体<@
提供了一种在事件发生时对行为进行抽样的方法。ePhysics
事件给出的离散时间步长求和来近似积分。的内容
let bPlayerPosition = stepper (0,0) $
(calcPosition <*> bPlayerForce <*> bPlayerPosition) <@ ePhysics