我现在正在通过FieldTrip适配器学习玻璃钢。并以奇怪的帧调度和集成的方式解决了问题。因此,现在我试图构建自己的标记事件来调整行为步进。
所以..。
flipflop :: Behavior String
flipflop = stepper "none" (xflip 2) where
xflip t0 = do
t <- withTimeE_ (atTime t0)
return "flip" `mplus` xflop (t+3)
xflop t0 = do
t <- withTimeE_ (atTime t0)
return "flop" `mplus` xflip (t+2)
txtGeom = ((uscale2 (0.5::Float) *%) . utext . show <$>)
main = anim2 (txtGeom . pure flipflop)问题是:
发布于 2011-01-08 04:47:31
看来以这种方式参加活动是行不通的。试一试:
import FRP.Reactive
import FRP.Reactive.FieldTrip
import Graphics.FieldTrip
import Control.Monad
import Control.Applicative
flipflop = stepper "none" $ either (const "flip") (const "flop")
<$> eitherE (atTimes ((+2) <$> [0,5..])) (atTimes [5,10..])
txtGeom = ((uscale2 (0.5::Float) *%) . utext . show <$>)
main = anim2 (txtGeom . pure flipflop)不幸的是,这个版本仍然有一个空间漏洞,但它要小得多。运行大约一分钟后,内存的总使用量约为9.7MB。
还有一个创建flipFlop的Behavior Bool函数。这对触发器很有效,但我没有看到在前两秒中添加“无”的干净方法。
我也试过这个
flipflop = stepper "none" $ (const "flip" <$> (atTimes ((+2) <$> [0,5..])))
`mplus` (const "flop" <$> atTimes [5,10..])它似乎与第一个版本的工作原理相同。
当然,这对于以您询问的方式进行动态调度并没有多大作用。不幸的是,我不相信这个用例在反应性中有效。
我非常欣赏那些产生反应的作品,我想要喜欢它,但它似乎是非常棘手的理由。邮件列表中的这个帖子就是这类问题的一个例子(以及解决方案!)这似乎很常见。此外,"unamb“库(它是许多反应性的基础)暴露了ghc线程中的一些非常微妙的bug,这些bug对结果起到了破坏作用,直到它们被修复在ghc-6.12周围。尽管这绝不是Conal或其他反应性贡献者的错,但它使得使用框架变得更加困难,特别是在早期的GHC中。
你可以试试其他的玻璃钢包装。Yampa有一个很好的实现,我听说埃雷亚相对简单,而且它有一个很好的演示应用程序。
https://stackoverflow.com/questions/2572036
复制相似问题