Jetzt wollen wir dies umsetzen. (Bewege die Maus und klicke zwischendurch ein paar Mal.)
Als Zustand bietet sich eine Liste von schon "angesammelten" Stempel-Teilbildern an. Listen hatten wir bisher als direkte Argumente für path
und group
. Sie lassen sich aber auch unabhängig davon anlegen und verwenden.
Verändere die update
-Funktion in folgendem Programm (Stamping.elm
):
type alias State = List Picture
initial : State
initial = []
update : Event -> (Float,Float) -> Float -> State -> State
update event (x,y) _ list = list
scene : (Float,Float) -> Float -> State -> Picture
scene (x,y) _ list =
group
(list ++ [ ngon' red 5 15 |> move (x,y) ])
main = displayWithState (-200,-150) (200,150) scene initial update Nothing
so dass das gewünschte Verhalten entsteht.
Hinweise:
-
[]
steht für eine leere Liste, wohingegen++
die Erweiterung einer Liste (oder allgemein das Aneinanderhängen zweier Listen) ermöglicht. -
In
update
undscene
kann, und hier sollte, über das entsprechende Argument auf die aktuelle Mausposition zugegriffen werden. (Den aktuellen Zeitwert ignorieren wir vorerst weiterhin.) -
Um auf Mausklicks zu reagieren, existiert der Ereignisname
Click
. -
Mittels
ngon
/ngon'
werden (ausgefüllte) Flächen von regelmäßigen Polygonen mit gegebener Eckenzahl und Umkreisradius beschrieben.
Zusatz: Erweitere nun das Programm, so dass nach jedem Klick der "Stempel" etwas größer wird (und in der Folge danach auch entsprechend größere Abdrücke hinterlässt).
(Datei, @share-elm)