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