2
我是新來的榆樹,我真的很困惑整個風格,它是如何工作的如何在榆樹中點擊鼠標點擊?
我想用鼠標點擊畫線。這些線應該是端到端。這意味着在前兩次點擊之後,每次點擊都可以將圖線添加到圖形中。
這應該使用sampleOn和foldp。
我真的不知道該怎麼做,有人能幫助我嗎?
我是新來的榆樹,我真的很困惑整個風格,它是如何工作的如何在榆樹中點擊鼠標點擊?
我想用鼠標點擊畫線。這些線應該是端到端。這意味着在前兩次點擊之後,每次點擊都可以將圖線添加到圖形中。
這應該使用sampleOn和foldp。
我真的不知道該怎麼做,有人能幫助我嗎?
好吧,這聽起來像一個家庭作業的問題,但我會咬,因爲我想嘗試
您首先需要告訴你每次點擊時鼠標的位置的信號。這就是sampleOn
發揮作用。
clickedPosition : Signal (Int, Int)
clickedPosition =
Signal.sampleOn Mouse.clicks Mouse.position
接下來,您需要一個跟蹤所有以前點擊點的信號。這就是foldp
的用途。它可以摺疊過去,讓你建立x的數組,y座標:
clickedPoints : Signal (List (Float, Float))
clickedPoints =
foldp (\(x, y) points -> (toFloat x, toFloat y) :: points) [] clickedPosition
你可以描述你的場景是需要點擊的點的列表,以及窗口大小的功能,並繪製連接所有點的路徑。該adjustPoint
功能點擊位置轉換爲可在拼貼的位置:
scene : List (Float, Float) -> (Int, Int) -> Element
scene points (width, height) =
let
adjustPoint (x, y) =
(x - toFloat width/2, toFloat height/2 - y)
in
collage width height
[ traced (solid red)
<| path
<| List.map adjustPoint points
]
最後,我們與Window.dimensions
信號一起綁在一起的clickedPoints
信號和scene
函數映射。
main : Signal Element
main =
Signal.map2 scene clickedPoints Window.dimensions
謝謝。你是對的。這是一個家庭作業問題,但這不是我需要做的確切問題。我只是重寫我的問題,以獲得一個示例代碼,因爲我真的不知道如何開始,因爲這種語言是如此奇怪。再次感謝! – SwordW
你好,我想我可以通過引用你的代碼完成我自己的作業,但我沒有做到。如果我私下發送我的代碼給你並請求你的幫助,那還好嗎? – SwordW
我目前無法完成,而且您可能會受到時間限制。嘗試詢問IRC頻道:http://elm-lang.org/community –