我尝试合并两个信号。一个是Mouse.clicks,另一个是Keyboard.space。
我的想法是:
type Event = Click | Space
mergedSignal : Signal Event
mergedSignal =
let
clickSignal = map (\event -> Click) Mouse.clicks
timeoutSignal = map (\event -> Space) Keyboard.space
in
merge clickSignal timeoutSignal
并以某种方式获得位置:
positionOnClickSignal:Signal (Int,Int)
positionOnClickSignal = sampleOn Mouse.clicks Mouse.position
显然,这是错误的。
答案 0 :(得分:4)
听起来您希望鼠标位置作为事件的一部分继续存在。在这种情况下,您可以将Event
重新定义为
type Event
= Click (Int, Int)
| Space
在mergedSignal
内,clickSignal
目前正在检查Mouse.clicks
,但根据您的说明和其他示例,我认为您实际上希望以{{1}为基础},它为您提供positionOnclickSignal
,并使用它,您现在可以填充Signal (Int, Int)
事件的(Int, Int)
部分,如下所示:
Click (Int, Int)
你会注意到我在上面取出了括号。这对于Elm来说更为惯用,因为clickSignal =
map Click positionOnClickSignal
本质上是一个函数,它接受一个Click
参数,该参数将从map函数传入。它可以很容易地写成:
(Int, Int)
现在,如果你只是想在屏幕上看到这个调试文本,那么快速简单的方法就是使用clickSignal =
map (\pos -> Click pos) positionOnClickSignal
包中的show
。< / p>
Graphics.Element
这将为您提供一些显示为页面上唯一内容的调试文本,您可以轻松地将其放在http://elm-lang.org/try上进行测试。