Отсутствует сигнал клавиатуры

Мне нужен сигнал 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)
Другие вопросы по тегам