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)

ワイヤは Netwire 4 で利用可能になります。それまでは、次のiterateWように記述できます。

hold (accum 1 . pure negate . keyUp SDLK_SPACE)
于 2012-08-17T02:40:10.480 に答える