Отсутствует сигнал клавиатуры
Мне нужен сигнал Keyboard Keyup. Но в библиотеке STD есть только нажатие клавиш, которое вызывает "зависание" в моей программе благодаря очень быстро меняющемуся состоянию игры (пауза и игра). Как это решить?
1 ответ
Посмотрите на пакет 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
на экране в течение 500 миллисекунд, следующих за каждым нажатием клавиши Enter:
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
так же легко визуально увидеть, что enterKeyUp
сигнал работает. Вот еще один пример, который показывает, как использовать его без части 500 мс. Отображает количество раз, когда клавиша ввода была отпущена:
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)