我有一个事件SF Input (Event ())
代表空格键的关键字。我有一些gravity
,每次用户释放密钥时,都必须在1
和(-1)
之间切换。所以我这样做了:
gravity <- accumHold 1 <<< (arr $ tag (*(-1))) <<< keyUp SDLK_SPACE -< ev
但它的作用是重复上下切换值,直到我再次按下该键。我不知道我在哪里做错了。
找到完整的来源here,也许有人可以帮助我。
答案 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)