Yampa值开关

时间:2012-08-16 21:34:29

标签: haskell sdl yampa

我有一个事件SF Input (Event ())代表空格键的关键字。我有一些gravity,每次用户释放密钥时,都必须在1(-1)之间切换。所以我这样做了:

gravity <- accumHold 1 <<< (arr $ tag (*(-1))) <<< keyUp SDLK_SPACE -< ev

但它的作用是重复上下切换值,直到我再次按下该键。我不知道我在哪里做错了。

找到完整的来源here,也许有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

显而易见的答案是使用开关:

gravity = dir 1
dir x = switch (constant x &&& keyUp SDLK_SPACE) (const (dir (-x)))

如果没有通过映射事件值进行切换,这当然也是可能的,但是切换似乎是自然的解决方案。您也可以使用Netwire,这样可以简化:

hold (iterateW negate 1 . keyUp SDLK_SPACE)

iterateW电汇将在Netwire 4中提供。在此之前,您可以这样写:

hold (accum 1 . pure negate . keyUp SDLK_SPACE)