3

キーボードのキーアップ信号が必要です。しかし、STD ライブラリにはキーダウンしかなく、ゲームの状態 (一時停止と再生) が非常に速く変化するため、プログラムで「フリーズ」が発生します。それを解決する方法は?

4

1 に答える 1

5

elm-signal-extra パッケージを調べます: http://package.elm-lang.org/packages/Apanatshka/elm-signal-extra/3.3.1

具体的には、関数がありますSignal.Discrete.whenChangeTo : a -> Signal a -> EventSource(EventSourceは の型エイリアスですSignal ())

次のプログラムはTrue、Enter キーを押すたびに 500 ミリ秒間画面に表示されます。

import Text (asText)
import Keyboard
import Signal
import Signal.Discrete (whenChangeTo)
import Signal.Time (since)

enterKeyUp = whenChangeTo False (Keyboard.isDown 13)

main = Signal.map asText (since 500 enterKeyUp)

編集:

信号が機能since 500 enterKeyUpしていることを簡単に確認できるように、を追加しました。enterKeyUp500 ミリ秒の部分なしで使用する方法を示す別の例を次に示します。Enter キーが離された回数が表示されます。

import Text (asText)
import Keyboard
import Signal
import Signal.Discrete (whenChangeTo)
import Signal.Time (since)

enterKeyUp = whenChangeTo False (Keyboard.isDown 13)

count : Signal a -> Signal Int
count signal = foldp (\_ x -> x + 1) 0 signal

main = Signal.map asText (count enterKeyUp)
于 2015-03-10T03:03:05.713 に答える