小编Asg*_*gel的帖子

反应性香蕉中的动态事件切换

我目前正在开发一款利用活性香蕉和SDL的小游戏.由于目标主要是为了更多地了解反应性香蕉和FRP,我尝试使用动态切换来设置游戏对象的集合,但到目前为止还没有取得多大成功.

在Bartab示例中,我发现了唯一使用事件切换的示例,最终触发在集合中创建新条目的事件是从事件网络外部获取的,而不是使用内部事件.我的问题是:这是唯一的方法,还是这个例子的特例?

在活性香蕉中是否还有更多动态事件切换示例?

根据我的理解,我得到一个时刻t(Anytime Behavior a),使用execute创建一个事件t(Anytime Behavior a),然后用于更新携带集合的Behavior.使用trimB对从触发事件创建的行为创建时刻t(任意时间行为a).如果此触发事件源自事件网络,则不会使用错误消息"无法推断(t~t1)"进行编译.我不确定〜确切意味着什么,但它显然会抛出错误,因为事件网络的两个框架值(t)和这个新的Moment值是不同的.

所以,长话短说,我不明白反应香蕉中的事件切换是如何工作的,我不知道为什么.它在理论上应该相对简单.

编辑:

-- Event Network
-- ==========================
setupNetwork :: forall t. Frameworks t => (EventSource Command, EventSource ()) -> IORef SpriteMap -> GameMap -> Moment t ()
setupNetwork ((addHandlerE, _), (addHandlerT, _)) sprites map = do

        -- Input Events
        ----------------
        eInput <- fromAddHandler addHandlerE -- Player Commands
        eFrame <- fromAddHandler addHandlerT -- Event on each Frame

        let
            [...]


            eSpawnEvent :: Event t (DSCoord)
            eSpawnEvent = extractCoord <$> eLeftClick 
                where
                        extractCoord (LeftClick c) …
Run Code Online (Sandbox Code Playgroud)

haskell frp reactive-banana

9
推荐指数
1
解决办法
470
查看次数

Yampa中重新(感觉)功能的时差

我现在正在学习Haskell和Yampa,并对重新启动函数有疑问.

reactimate :: IO a -- init
      -> (Bool -> IO (DTime, Maybe a)) -- sense
      -> (Bool -> b -> IO Bool) -- actuate
          -> SF a b -- signal function
      -> IO ()
Run Code Online (Sandbox Code Playgroud)

正如你在类型签名中看到的那样,sense函数的部分输出是函数当前和上一次调用之间的时间差.在我看到的例子中,这个时间差是在意义上"手动"计算的,使用IORef来保持前一次调用的值.

你必须使用外部状态跟踪时差这似乎很奇怪,为什么在重新计算功能中不进行这种计算?IORef是处理它的好方法吗?

haskell functional-programming reactive-programming yampa

7
推荐指数
1
解决办法
279
查看次数