我需要键盘键盘信号。但STD库只有keydown导致"冻结"在我的程序中,由于快速变化的游戏状态(暂停和播放)。怎么解决?
答案 0 :(得分: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 ()
的类型别名
每次在Enter键上输入密钥后,以下程序将在屏幕上显示True
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
只是为了看到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)