Thanks!
Dne četrtek, 19. maj 2016 16.35.39 UTC+2 je oseba Janis Voigtländer
napisala:
>
> init =
> (Model { width = 0, height = 0 } [] { x=0 , y=0 }, Task.perform never
> WindowResize Window.size)
>
> with never from
> http://package.elm-lang.org/packages/elm-community/basics-extra.
>
>
> 2016-05-19 16:24 GMT+02:00 Matic Zavadlal <[email protected]
> <javascript:>>:
>
>> The problem is that init sets width and height of screen to 0 and doesn't
>> update them until the screen resizes. How can I get the values of window
>> width and height in init with Tasks?
>>
>>
>> Here's my code:
>>
>>
>> import Color exposing (..)
>> import Collage exposing (..)
>> import Element exposing (..)
>> import Random
>> import Window exposing (..)
>> import Mouse
>> import Task
>> import Platform.Sub as Sub
>>
>> import Html.App as App
>> import Html exposing (..)
>>
>>
>>
>> main =
>> App.program
>> { init = init
>> , view = view
>> , update = update
>> , subscriptions = subscriptions
>> }
>>
>>
>> -- MODEL
>>
>> type alias Model =
>> { screen : Size
>> , balls : List (Ball)
>> , previousMouse : Mouse
>> }
>>
>>
>> type alias Ball =
>> { position : (Int, Int)
>> , color : Color
>> }
>>
>> type alias Mouse =
>> { x : Int
>> , y : Int
>> }
>>
>>
>>
>> -- UPDATE
>>
>> type Msg
>> = Move Mouse
>> | Click Mouse
>> | NewBall Color
>> | WindowResize Size
>>
>> update : Msg -> Model -> (Model, Cmd Msg)
>> update msg ({previousMouse} as model) =
>> case msg of
>> Move position ->
>> let
>> (px,py) = (previousMouse.x, previousMouse.y)
>> (x, y) = (position.x, position.y)
>> newBalls = List.map (updateCoordinates (x-px, py-y))
>> model.balls
>> in
>> (Model model.screen newBalls position, Cmd.none)
>>
>> Click _ ->
>> (model, Random.generate NewBall rgb)
>>
>> NewBall color ->
>> let
>> newBalls = model.balls ++ [ Ball (0,0) color ]
>> in
>> (Model model.screen newBalls model.previousMouse, Cmd.none)
>>
>> WindowResize size ->
>> (Model size model.balls model.previousMouse, Cmd.none)
>>
>>
>> updateCoordinates : (Int,Int) -> Ball -> Ball
>> updateCoordinates upd ball =
>> let
>> (x,y) = ball.position
>> (dx,dy) = upd
>> newPosition = (x+dx, y+dy)
>> in
>> { ball |
>> position = newPosition
>> }
>>
>>
>> rgb : Random.Generator Color.Color
>> rgb =
>> Random.map3 Color.rgb (Random.int 0 255) (Random.int 0 255) (Random.int
>> 0 255)
>>
>>
>>
>>
>> -- VIEW
>>
>> view : Model -> Html Msg
>> view model =
>> -- div [] [ Html.text (toString (Window.height \a -> a)) ]
>> (collage model.screen.width model.screen.height
>> (List.map drawBall model.balls))
>> |> Element.toHtml
>>
>>
>>
>> drawBall : Ball -> Form
>> drawBall ball =
>> let
>> (x,y) = ball.position
>> color = ball.color
>> in
>> circle 10
>> |> filled color
>> |> move ((toFloat x), (toFloat y))
>>
>>
>>
>> -- SUBSCRIPTIONS
>>
>> subscriptions : Model -> Sub Msg
>> subscriptions model =
>> Sub.batch
>> [ (Mouse.moves Move)
>> , (Mouse.clicks Click)
>> , (Window.resizes WindowResize)
>> ]
>>
>>
>> -- INIT
>>
>> init : (Model, Cmd Msg)
>> init =
>> (Model { width = 0, height = 0 } [] { x=0 , y=0 }, Cmd.none)
>>
>>
>>
>>
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Elm Discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
You received this message because you are subscribed to the Google Groups "Elm
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.