elm-canvas에서 Canvas API를 사용합시다!

아무래도

오늘은 크리스마스입니다. 어떻습니까?
나는 이 어드벤트 캘린더를 서둘러 쓰고 있습니다.

갑작스럽지만 elm에서 캔버스를 사용하고 싶을 때가 있습니다.
내가 있습니다.

그래서 elm-canvas을 소개하고 싶습니다.

도입 방법


$ npm i elm-canvas
$ elm install joakin/elm-canvas
// main.js
import 'elm-canvas';

or
<!-- index.html -->
<head>
    <script src="https://unpkg.com/elm-canvas/elm-canvas.js"></script>
</head>

ellie 에서 사용하고 싶은 사람은 CDN에서 import하는 방법으로 합시다.

사용법


ImageData 를 만지는 시스템의 API 이외는 제공되고 있기 때문에 보통의 canvas 와 같이 취급할 수 있습니다.

직사각형 그리기



기본적인 곳에서 갑시다.
사각형의 그리기는
rectRender : Renderable
rectRender =
    shapes
        [ fill Color.red ]
        [ rect (100, 100) 50 50 ]

이런 느낌으로 쓰면 座標(100, 100) 곳에 50 x 50 의 구형을 赤で塗りつぶし 로 그릴 수 있습니다.

자세히 살펴 보겠습니다.

기본 함수는 shapes : List Setting -> List Shape -> Renderable 입니다.Setting 는 주로 채우기 테두리의 색, 이동·회전·확대 등 외형에 관계되는 부분을 취급합니다. Html.Attribute 같은 느낌이네요.Shape 는 구형이나 원, path 등의 형태의 정보입니다.

이것들을 shapes 함수에 넣는 것으로 그려줍니다. 같은 외형이 되는 형태는 1개의 shapes 함수로 묘화 하면 좋은 것 같습니다.

원 그리기



그럼, 座標(100, 100) 의 곳에 半径50 의 원을 緑で縁取り 그려 봅시다.

위의 설명에서 생각하면 List Setting 곳에 緑で縁取りList Shape 곳에 座標(100, 100)のところに半径50の円 를 넣으면 좋을 것 같습니다.

따라서 정답은 이런 느낌입니다.
circleRender : Renderable
circleRender =
    shapes
        [ stroke Color.green ]
        [ circle (100, 100) 50 ]

테두리는 보통 canvas 같이 stroke 에서 할 수 있습니다.
원은 circle 함수를 사용하여 표현할 수 있습니다. 간단하죠?

브라우저에 그리기



이것만으로는 그릴 수 없습니다. html로합시다. toHtml 함수를 사용합니다.toHtml : Point -> List (Html.Attribute msg) -> List Renderable -> Html msg 이므로 view 함수의 임의의 위치에 넣어 봅시다.
view : Model -> Html msg
view model =
    div []
        [ toHtml (model.width, model.height)
            []
            [ clear
            , render
            ]
        ]

같은 느낌

주의점



이 package는 어디까지나 elm용으로 CanvasAPI를 사용할 수 있도록 한 것이므로 스스로 화면의 갱신을 해야 합니다.
화면 업데이트는 이전 프레임에서 그린 내용을 지우는 것입니다. canvas에는 clearRect가 있지만이 패키지에는 없습니다. 캔버스의 영역을 임의의 색으로 채우는 함수를 만들어 두면 편리합니다.

게다가 shapes 이나 toHtmlRenderable 의 순서는 묘화의 순서입니다.
그래서 위의 예에서 clearrender 를 반대로 쓰면 원하는 결과가 되지 않을 것입니다. 거기에 생각하고 코딩합시다.

마지막으로 좌표 지정이 (Float, Float)인 튜플입니다. 이 부분에 대해서는 특별히 말하지 않습니다. 최선을 다합시다.

요약



이 외에도 path 를 이용한 복잡한 도형이나 텍스트 등을 그릴 수 있습니다.
나 자신도 이 기사를 위해서 크리스마스 같은 것을 만들려고 했습니다만, 기사를 쓰려고 한 8일전에 이 package가 갱신되어 사양이 완전히 바뀌고 있었습니다. . .
혼란의 근원이 되기 때문에 소스 코드는 싣지 않습니다만, 되어 있는 것은 싣고 싶습니다.

눈이 내렸다 피 c. 라고 r. 이 m / T96 또는 gJ3 — 우지마루🐣 (@uzimaru0601) December 3, 2018

아직 모든 기능을 접할 수 없으므로 수시로 업데이트하고 싶습니다.

갱신전과 갱신후의 변경으로서는, 선언적으로 쓸 수 있게 되었습니다. 아마도 업데이트 빈도가 높은 라이브러리이므로 사용할 때는 문서를 읽으십시오.

그럼 좋은 해가

좋은 웹페이지 즐겨찾기