【问题标题】:Keyboard keyup signal missing键盘按键信号丢失
【发布时间】:2015-03-09 20:18:05
【问题描述】:

我需要键盘按键信号。但是由于游戏状态变化非常快(暂停和播放),STD 库只有 keydown 会导致我的程序“冻结”。如何解决?

【问题讨论】:

    标签: elm elm-signal


    【解决方案1】:

    查看 elm-signal-extra 包:http://package.elm-lang.org/packages/Apanatshka/elm-signal-extra/3.3.1

    具体有一个函数Signal.Discrete.whenChangeTo : a -> Signal a -> EventSourceEventSourceSignal ()的类型别名)

    以下程序将在屏幕上显示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 模块有一个用例 :) 这就是我写这些东西时的想法,很高兴看到它实际上很受欢迎。
    • 但是,当我不想要那个 500 毫秒的时候怎么办?
    • 只需删除since 500enterKeyUp 信号已经是每次释放回车键时都会触发的信号。
    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    相关资源
    最近更新 更多