【发布时间】:2015-03-09 20:18:05
【问题描述】:
我需要键盘按键信号。但是由于游戏状态变化非常快(暂停和播放),STD 库只有 keydown 会导致我的程序“冻结”。如何解决?
【问题讨论】:
标签: elm elm-signal
我需要键盘按键信号。但是由于游戏状态变化非常快(暂停和播放),STD 库只有 keydown 会导致我的程序“冻结”。如何解决?
【问题讨论】:
标签: elm elm-signal
查看 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 ms 部分的情况下使用它。它显示了回车键被释放的次数:
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)
【讨论】:
Signal.Discrete 模块有一个用例 :) 这就是我写这些东西时的想法,很高兴看到它实际上很受欢迎。
since 500。 enterKeyUp 信号已经是每次释放回车键时都会触发的信号。