在我的突破实现中,有两个主要行为描述了 游戏的主要州:
paddlePosition :: Behavior t Point
ballPosition :: Behavior t Point
两者都是以tickEvent :: Event t ()
的方式实现的
更新它们。
gameOverEvent :: Event t ()
过滤所有球的滴答事件
位置在屏幕下方。
我希望尽快将paddlePosition
替换为新行为
是一个gameOverEvent
,将桨留在原位,用伪代码:
newPaddlePosition = \t -> case gameOverEvent of
[] -> paddlePosition t
((t',()) : _) -> paddlePosition t'
第一个问题是:我如何表达newPaddlePosition
使用
无功香蕉?
第二个问题是有点模糊:什么是组织的好方法
整个程序取决于游戏是否结束?还有其他
考虑因素:如何处理ballPosition
,如何绘制游戏等等
上。
答案 0 :(得分:1)
您可能正在寻找动态事件切换,尤其是switchB
组合器。
请注意,newPaddlePosition
函数的伪代码没有多大意义:它表示当gameOverEvent
从未发生时,新的paddle位置等于paddlePosition
,否则它是常量并且等于事件发生时paddlePosition
的值。这在因果FRP库中是不可能表达的。你可能意味着别的东西。