在我的突破实现中,有两个主要行为描述了
游戏的主要状态:
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
,如何绘制游戏等上。
最佳答案
您可能正在寻找动态事件切换,尤其是switchB
组合器。
另请参见this question。
请注意,您的newPaddlePosition
函数的伪代码意义不大:它表示当gameOverEvent
从不发生时,新的桨位置等于paddlePosition
,否则它是恒定的,并且等于事件发生时的paddlePosition
的值发生。这不可能在因果FRP库中表达。您可能会说其他话。