Wesbos - Fun with Canvas
๐ ์ฌ์ค ๊ทธ๋ ๊ฒ ์์ฃผ ์ฌ์ฉํ ๊ฒ ๊ฐ์ง๋ ์์ง๋ง, ๋ฐฐ์๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ ..?
Javascript๋ฅผ ์ด์ฉํ ๊ทธ๋ฆฌ๊ธฐ ๋๊ตฌ ๊ธฐ๋ฅ ๊ตฌํ ์ฑํฐ๋ค
๋ก์ง
- canvasํ๊ทธ๋ฅผ ํตํด ๊ทธ๋ฆผํ์ ๋ธ๋ผ์ฐ์ ์ ๊น์์ค๋ค
- canvas์ ๊ฐ๋ ์ ์ ์๋ฅผ โ2dโ๋ก ์ค์ ํ๋ค : canvas.getContext(โ2dโ)
- canvas์ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๋ถ์ฌํ๋ค.
- ์บ๋ฒ์ค ๋ด์์ ๋ง์ฐ์ค ์์ง์์ ๋ฐ๋ผ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง ์ ์๋๋ก ctx์ค์ ์ ํ๋ค (๊ทธ๋ฆฌ๊ธฐ ์์ฑ๊ณผ ์์น๊ฐ ์ค์ )
๊ทธ๋ฆผํ ๊น๊ธฐ
canvas ํ๊ทธ
๐ก
<canvas></canvas>
์ ๊ฐ์ ํํ๋ก ์ฐ์ด๋ฉฐ, id๊ฐ์ ๋ถ์ฌํด ์ฌ์ฉํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
canvasํ๊ทธ์ id๊ฐ์ #draw
๋ก ๋ถ์ฌํด๋๋ค. ์ด๋ฅผ ํ์ฉ!
1 | const canvas = document.querySelector('#draw'); |
canvasํ๊ทธ ๋ถ๋ฌ์ค๊ธฐ ๋ฐ ๊ธฐ๋ณธ์ค์ (๋ ๋๋ง ์ปจํ ์คํธ)
๐ก canvas๋ง ๋ธ๋ผ์ฐ์ ์ ํผ์ณ์ ธ ์๋ค๊ณ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๋๊ฒ ์๋๋ค.
**getContext()**๋ฅผ ํตํด ๋ ๋๋ง ์ปจํ
์คํธ๊น์ง canvas์ ๋
ธ์ถ์์ผ์ค์ผ
๊ทธ๋ฆฌ๊ธฐ ํจ์๋ ๋ ๋๋ง ์ปจํ
์คํธ ๋ฑ์ ํ์ฉํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ธฐ ๋๊ตฌ๋ฅผ ์ง์ ํด์ค๋ค๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ํธํ ๊ฒ์ด๋ค.
์ด๋ฒคํธ๋ฆฌ์ค๋ ์ ์ฉ ๋ฐ ํจ์ ์์ฑ
๐ก canvas๊ฐ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ ์ ์๋๋ก addEventListener์ ๊ทธ์ ๋ฐ๋ฅธ ํจ์๋ฅผ ์์ฑํด์ค์ผ ํ๋ค.
๐ก ์ด์ drawํจ์๋ฅผ ์์ฑํด๋ณด์ !
ctx๋ฅผ ํตํ ๊ทธ๋ฆฌ๊ธฐ ์์ฑ ์ธํ
๐ก ๊ทธ๋ฆผ์ ๊ทธ๋ ค์ผํ๊ธฐ ๋๋ฌธ์, ๋จผ์ ๊ทธ๋ฆฌ๊ธฐ ๋๊ตฌ๋ค์ ์ธํ ํด์ฃผ์
ctx์ธํ ์ ์ํ ํจ์ ๋ฐ ๊ธฐ๋ฅ๋ค์ ์๋ ํ์ ์ ๋ฆฌํด๋์๋ค.

ctx
ctx๋ฅผ ํตํ ์์น๊ฐ ์ค์ ๋ฐ ๊ทธ๋ฆฌ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ
๐ก ๊ฑฐ์ ๋ค ์๋คโฆ..
์ด์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๋๋ก xy ์ขํ๊ฐ๊ณผ ๊ทธ์ ํด๋นํ๋ ๊ธฐ๋ณธ ๋ณ์๊ฐ๋ค์ ์ง์ ํด์ค์ผ ํ๋ค.
1 | //๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ ์ํ๋ก ์์ง์์ ๋๋ง ๊ทธ๋ฆฌ๊ธฐ๊ฐ ๊ฐ๋ฅํ๋๋ก isDrawing์ ์ค์ ํด์คฌ๋ค. |
1 | //๋ง์ฐ์ค๋ฅผ ๋๋ ์ ๋ x์ y๊ฐ์ด ์
๋ ฅ๋๋๋ก ์ค์ ! |
offsetX & offsetY
๐ก offsetX : ์ด๋ฒคํธ์ ๋์์ด ๋๋ ๊ฐ์ฒด ๋ด์์์ ์๋์ ๋ง์ฐ์ค โx์ขํโ ์์น๋ฅผ ๋ํ๋
offsetY : ์ด๋ฒคํธ์ ๋์์ด ๋๋ ๊ฐ์ฒด ๋ด์์์ ์๋์ ๋ง์ฐ์ค โy์ขํโ ์์น๋ฅผ ๋ํ๋
์ต์ข ์์ฑ ์ฝ๋
1 | const canvas = document.querySelector('#draw'); |
Wesbos - Fun with Canvas
https://hoonjoo-park.github.io/javascript/wesbos/08. Fun with Canvas/