0

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

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

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

完整的来源在这里,也许有人可以帮助我。

4

1 回答 1

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)
于 2012-08-17T02:40:10.480 回答