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.

Reply via email to