Canvas(2D Context)์์ ๋๋ ํ๊ณ
์ฑ๋ฅ์ ์ธ ํ๊ณ
HTML Canvas๋ ๋ฌด์์ธ์ง Canvas API์ ์ฑ๋ฅ์ ํ๊ณ์ ๊ณผ ์ต์ ํ ๋ฐฉ๋ฒ์ ๋ฌด์์ด ์๋์ง๋ฅผ ์ ๋ฆฌํ ๊ธ์ ์ฝ์ด ๋ณด์๋๊ฑธ ์ถ์ฒํฉ๋๋ค! โ HTML5 Canvas์ ์ต์ ํ
๊ธฐ์กด์ ์ค๋ต๊ฒ์์ HTML Canvas๊ฐ ์ ๊ณตํ๋ 2D Context๋ฅผ ์ฌ์ฉํด ๊ฒ์์ ๋ ๋๋ง ํ์ต๋๋ค.
HTML Canvas ๊ฐ ์ ๊ณตํ๋ 2D Context๋ WebGL API ๋ ์ ์์ค์ ๊ทธ๋ํฝ์ค ์ฐ์ฐ์ ์ ๊ณตํ๋๋ฐ์.
์ด๋ก ์ธํด ๊ต์ฅํ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ณ ๋ณ๋์ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ์ ์ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
๋ค์๋งํด ๊ฐ๋ฐ์์ ์ฑ ์์ด ๊ต์ฅํ ์ปค์ง๊ฒ ๋ฉ๋๋ค.
์ฌ์ฉํ๋ ์์ ์ต์ ํ, ํ ์ค์ณ ๊ด๋ฆฌ, ๋ ๋๋ง, ์ด๋ฒคํธ ๋ฑ๋ฑ ์ ๊ฒฝ์ธ ๋ถ๋ถ์ด ๋ง๊ณ ํนํ๋ Canvas ๊ฐ ์ต์ํ์ง ์์ ์ฌ๋์๊ฒ๋ ๋ง์ ํด๋จผ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
Snack Game์์๋ ์ด๋ฐ์ผ์ด ๋ฐ์ํ๋๋ฐ์. ๋ค์์ ์ฝ๋๊ฐ ํ๋ ์ ๋๋์ ์ ๋ฐํ์ต๋๋ค.
์ฝ๋๋ฅผ ๋ณด๋ฉด 3ํญ ์ฐ์ฐ์ผ๋ก Apple๊ฐ์ฒด์ ๋ ๋๋งํ ์ด๋ฏธ์ง๋ฅผ ์ ํ๊ณ ์๋๋ฐ์.
๋ฌธ์ ๋ ์ ๊ฐ์ฒด๊ฐ 100๊ฐ ์ ๋๊ฐ ํ๋ฉด์ ๋ ๋๋ง ๋๋๋ฐ ๊ฐ๊ฐ ์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๊ณ 3ํญ ์ฐ์ฐ์ผ๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ ํํ๋ ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ ๊ฒ ์ผ๋ก ์ถ์ธกํ๊ณ ์์ต๋๋ค.
ํ๋ คํ ์ ๋๋ฉ์ด์
Pixi์ ๋์ ์ ๊ฒฐ์ ํ๊ฒ๋ ๊ฐ์ฅ ํฐ ์ด์ ๊ฐ ์๋๊น ์ถ์ต๋๋ค.
๋ค์ ์์งค์ Snack Game์ ์ ๋๋ฉ์ด์ ์ธ๋ฐ์.
๊ต์ฅํ ์บ์ฃผ์ผํ ๊ฒ์์ด๋ผ ์ด์ ๋๋ฉด ์ถฉ๋ถํ๊ฐ ์ถ์ง๋ง ๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก ๋งค์ฐ ์์ฌ์ ์ต๋๋ค.
๊ทธ๋ ๋ค๊ณ ํ๋ คํ ์ ๋๋ฉ์ด์ ์ ์ํด์ ์ง์ ์์คํ ์ ๋ง๋ค์ด์ผ ํ๋๊ฒ๊ณผ, ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ ๊ฐ๋ฐํ๋ฉด์ ๋ฐ์ํ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ง์ ํด๊ฒฐํด์ผ ํ๋๊ฑด ์๋นํ ๋ถ๋ด์ค๋ฌ์ ์ต๋๋ค.
๊ฒฐ๊ตญ์ ์ ์ ํ ๋๊ตฌ๋ฅผ ์ ํํด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ์ ํด๋ณด์๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ์ต๋๋ค.
๋ฌผ๋ก ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ฑ๋ฅ ๋ฌธ์ ๋ ๋ฐ์ํ ์ ์์ง๋ง ์ง์ ๋ง๋๋ ๊ฒ ๋ณด๋ค๋ ๋์๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
Pixi.js์ ์ ํํ ์ด์
Pixi.js๋ ๊ฒ์, ๋ฐ์ดํฐ ์๊ฐํ ๋ฑ ๋ค์ํ ๋ถ๋ถ์์ ์ฌ์ฉ๋ ์ ์๋ 2D ๊ทธ๋ํฝ์ ์ํ ์คํ์์ค WebGL ๊ธฐ๋ฐ ๋ ๋๋ง ์์คํ ์ ๋๋ค.
2D ๊ทธ๋ํฝ ๋ ๋๋ง์ ์ํ ์์คํ ์ด๋ผ๋ ๋ง์ฒ๋ผ ๊ฒ์ ์์ง์ ์๋๋๋ค.
์น ๊ฒ์์ ์ํด์ Phaser์ ๊ฐ์ ๊ฒ์ ์์ง์ ์ฌ์ฉํ ์ ์๋๋ฐ์.
์ด๋ฐ ๊ฒ์์์ง์ ๊ฒ์์ ์ํ ์ถ์ํ๊ฐ ๋์ด ๋น๊ต์ ๋ฌ๋์ปค๋ธ๊ฐ ์ ๊ณ ๊ฒ์ ๊ฐ๋ฐ์ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์นด๋ฉ๋ผ, ์ถฉ๋ ๊ฐ์ง์ ๊ฐ์ ๊ฒ์ ๋ฌผ๋ฆฌํ์ ์ง์ํ๊ณ , Pixi.js๋ ์ด๋ฐ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํด์ผ ํฉ๋๋ค.
๊ทธ๋ผ์๋ Pixi.js๋ฅผ ์ ํํ ์ด์ ๋ Snack Game๋ ๊ฐ๋ฒผ์ด ๊ฒ์์ด๊ธฐ์ Phaser๊ฐ ์ง์ํ๋ ๋ง์ ๊ธฐ๋ฅ์ด ํ์๋ก ํ์ง ์์ต๋๋ค.
๋งจ ์ฒ์์ ์์งค์ ๋ณด๋ฉด ์์๊ฒ ์ง๋ง ์ถฉ๋ ๊ฐ์ง๋ ์นด๋ฉ๋ผ ๊ธฐ๋ฅ์ด ํ์ํ์ง ์์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Pixi.js๋ Phaser์ ๋น๊ตํด ๊ฐ๋ฒผ์ด ๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ ๊ฐ์ง๊ณ ์๋๊ฒ๋ Snack Game์ ์ ํฉํ์ต๋๋ค.
Phaser | PixiJS | |
minified๋ ๋ฒ๋ค ์ฌ์ด์ฆ | 1 MB | 478.6 kB |
minified ๋ฐ GZipped ํ ๋ฒ๋ค ์ฌ์ด์ฆ | 274.1 kB | 125.4 kB |
minified๋ Flappy Bird ๊ฒ์ ์ฌ์ด์ฆ | 1.02 MB | 424 kB |
๊ฐ๋ณ๋ค๋ ์ฅ์ ๊ณผ Snack Game์ ํน์ง์ ์๊ฐํด Pixi.js๋ฅผ ์ ํํ์ต๋๋ค.
๋ , Pixi.js๋ 2D ๊ทธ๋ํฝ ๋ ๋๋ง์ ์ง์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค ๋ณด๋ ๋ ๋๋ง ์ฑ๋ฅ ํ๋๋ ๐ย ์ด๋ผ๊ณ ํฉ๋๋ค.
Pixi.js์ ์ํ๊ณ
Pixi.js๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐ์ ์ผ๋ก ์ง์ํ๋ ์ฌ๋ฌ ํ๋ฌ๊ทธ์ธ๋ค์ ์ ๊ณตํฉ๋๋ค.
Snack Game์์ ์ฌ์ฉํ ํ๋ฌ๊ทธ์ธ๋ง ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
Pixi/UI
Pixi/UI๋ Canvas ์์ CheckBox, Button, Input ๋ฑ UI ์์๋ค์ ์ง์ํฉ๋๋ค.
onHover, onPress ๋ฑ ์ด๋ฒคํธ๋ค์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ UI ๋์๊ณผ ๊ด๋ จ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
Pixi/assetpack
์ ๋ง ํธ๋ฆฌํ๊ณ ์ ์ฉํ ํ๋ฌ๊ทธ์ธ ์ ๋๋ค.
์๋ณธ assets ํด๋ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง์ ์ค๋์ค๋ฅผ ์ต์ ํ ํ๊ณ ์ด๋ฏธ์ง๋ค์ sprite ํ์์ผ๋ก ์๋์ผ๋ก ํฉ์ณ์ค๋๋ค.
์ดํ๋ฆฌ์ผ์ด์ ์์ ์๋์ผ๋ก ์ํํ๋ ํ๋ฌ๊ทธ์ธ์ ์๋๊ณ ์๋์ฒ๋ผ ํ์ผ์ ํ๋ ๋ง๋ค๊ณ assets ๋ณ๊ฒฝ์ ํ๋ฒ์ฉ ์คํ์์ผ์ฃผ๋ฉด ๋ฉ๋๋ค.
GSAP
Tween ์ ๋๋ฉ์ด์ ์ ์ํ ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ง์ํ๋ GSAP์ ๋๋ค.
Pixi.js์ ํ๋ฌ๊ทธ์ธ์ ์๋๋ฉฐ Javascript ๊ฐ์ฒด ์์ฑ๋ ๊ฐ๋ ฅํ easing function์ผ๋ก ์ ์ด๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ Pixi.js์ ๊ถํฉ์ด ์ข์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ ๋๋ฉ์ด์ ๋ ์๋นํ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ฐ์.
ํ๊ฒ ์์น์ ์ ๋๋ฉ์ด์ ์ฌ์ ์๊ฐ, ์ฌ์ฉํ easing function๋ง ๋์ถฉ ์ ๊ณตํ๋ฉด ์ ๋๋ฉ์ด์ ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฐ ์์ ๋ค์ ๋น๋๊ธฐ๋ก ์๋ํ๊ธฐ์ ์์ ์์งค์ฒ๋ผ ์ฌ๋ฌ Snack์ ์ ๋๋ฉ์ด์ ์ด ํ๋ฒ์ ์๋ํ๋๊ฑธ ๋ณผ ์ ์์ต๋๋ค.
gsap.to, from, fromTo๋ ์ ๋๋ฉ์ด์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐํํ๊ณ .then ๋ฉ์๋๋ฅผ ์ง์ํ๊ธฐ์ await๋ก ๋๊ธฐ์ ์ธ ์ ๋๋ฉ์ด์ ๋ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
Pixi/Sound
์ค๋์ค ์ฌ์์ ์ํ ํ๋ฌ๊ทธ์ธ ์ ๋๋ค.
์ค๋์ค ๋ก๋ฉ ๋ฐ ์ฌ์, ๋ณผ๋ฅจ ์กฐ์ , ํด๋ฆฝ ๋ฑ ์ค๋์ค์ ๊ด๋ จํ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค.
์ค๋์ค ๊ฐ์ฒด๋ก ๋ง๋ค์ด ๊ด๋ฆฌํ๋ฉด gsap์ ์ฐ๋ํด ํ์ด๋ ์ธ/์์์ ์์ฐ์ค๋ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
(gasp๋ ์ ์ด์ผ!)
gsap.to(current, { volume: 0, duration: 1, ease: 'linear' }).then(() => {
current.stop();
});React๋ฅผ ์ํ pixi-react ์ฌ์ฉ ํด์ผํ ๊น?
Pixi ํ๋ฌ๊ทธ์ธ ์ค React๋ฅผ ์ํ pixi-react ๋ฅผ ์ง์ํ๋๋ฐ์. (Snack Game์์๋ ์ฌ์ฉ ์ํจ)
PixiJS์ ๊ณ ์ฑ๋ฅ 2D ๊ทธ๋ํฝ ๋ ๋๋ง์ React์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ์ ๊ฒฐํฉํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
ํ์ง๋ง ๊ฒ์ ๊ฐ๋ฐ์ ์์ด์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ ์ด์ํ ๋๋์ด ๋ค์์ต๋๋ค.
๊ธฐ์กด์ canvas api 2D Context๋ก ๊ฐ๋ฐํ ๋๋ class๋ฅผ ํตํด ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ํ์ด๋ณด์๋๋ฐ,
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ ๋ณด๋ค ๊ฐ์ฒด์งํญ์ ์ธ ๊ตฌ์กฐ๊ฐ ์ต์ํ๊ธฐ๋ ํ๊ณ ๊ฒ์์ ๋ ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
(์ถ์ํ, ์กฐํฉ, ์์ ๋ฑ ์ ์ฐํ ์ฌ๋ฌ๊ฐ์ง ์ฅ์ ์ผ๋ก ์ธํด)
์ด๋ฐ ์ด์ ๋ก ์ผ๋ฐ Pixi.js๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
Pixi ์ด๊ธฐ ์ค์
Pixi.js๋ฅผ React ์์ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ์ค์ ์ ๋ช๊ฐ์ง ํด์ฃผ์ด์ผ ํฉ๋๋ค.
์ฐ์ ์ ์ผ๋ก Pixi ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ธฐ ์ํด Pixi Application์ ์ ์ญ์ผ๋ก ์์ฑํด ์ค๋๋ค.
์ด ํด๋์ค๋ ๋ ๋๋ฌ, ์ ๋๋ฉ์ด์ ์ ์ํ ํฐ์ปค ๋ฐ ๋ฃจํธ ์ปจํ ์ด๋๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
๊ตณ์ด ์ ์ญ์ผ๋ก ์์ฑํ ํ์๋ ์์ง๋ง ํ์ด์ง ์ด๋์์๋ ๊ฒ์์ ์ํ๋ฅผ ์ ์งํ๊ณ ๋งค๋ฒ Pixi ์ดํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐํ ํ๋ ๋ถํ์ํ ๋์์ ์๋ฐฉํ๊ธฐ ์ํจ์ ๋๋ค.
const app = new Application();Pixi ์ด๊ธฐํ
๊ทธ ๋ค์์ Pixi Application์ ์ด๊ธฐํ ํด์ผํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด ์ด๊ธฐํ๋ ํ ๋ฒ๋ง ํด์ฃผ์ด์ผ ํ๋๋ฐ์. ์ค๋ณต์ผ๋ก ์ด๊ธฐํ๋ฅผ ํ๊ฒ๋๋ฉด ์ฝ์์ ์๋ฌ๋ฅผ ๋ฑ์ต๋๋ค.
์ ๋ useEffect์์ ์ด๊ธฐํ๋ฅผ ํ์ต๋๋ค.
Pixi Application์ ์ ์ญ์์ ์์ฑํ๊ฒ์ฒ๋ผ ์ด๊ธฐํ๋ ์ ์ญ์์ ํ๋ฉด ๋์ง์๋? ๋ผ๋ ์๋ฌธ์ด ๋ค ์ ์๋๋ฐ ์๋์์ ์ค๋ช ํ Pixi Application Canvas์์ ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค.
useEffect์์ ์ด๊ธฐํ๋ฅผ ์งํํ๊ธฐ ๋๋ฌธ์ ๊ฒ์ ํ์ด์ง๊ฐ ๋ง์ดํธ๋ ๋ ๋ง๋ค Pixi Application์ ์ด๊ธฐํ ํ๋ ค๊ณ ์๋ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ์ด๊ธฐํ๋ฅผ ํ๋ค๊ณ ์๋ ค์ฃผ์ด์ผ ํฉ๋๋ค.
์ ๋ ์ ์ญ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ํด๊ฒฐํ๋๋ฐ์.
๋ค๋ฅธ ํ์ด์ง๋ฅผ ๊ฐ๋ค๊ฐ ์๋ ์ํ๊ฐ ์ ์ง๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Pixi Application Canvas
Pixi Application์ด ๋ ๋๋ฌ๋ฅผ ์์ฑํ ๋ ๋ ๋๋งํ Canvas์์๋ฅผ ๋น๋ํด์ผ ํฉ๋๋ค.
Pixi๊ฐ ๊ทธ๋ฆฌ๋ ๊ทธ๋ฆผ์ ๋ณด๋ ค๋ฉด ์ด Canvas ์์๋ฅผ DOM์ ์ถ๊ฐํด์ผ ํ๋๋ฐ์.
React ์์๋ Ref๋ก Dom์์๋ฅผ ๊ฐ์ ธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ปดํฌ๋ํธ ์ธ๋ง์ดํธ์ clean-up ํจ์์์ ๋ ๋๋ง์ ์ค์งํฉ๋๋ค.
๋ง์ฝ ๋ค์ ๊ฒ์ ํ์ด์ง๋ก ๋์์ค๋ฉด CanvasBase ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋๊ณ ๋ค์ Pixi Application Canvas๋ฅผ DOM์ ์ถ๊ฐํฉ๋๋ค.
Pixi Application์ autoStart ์ต์ ์ด ๊ธฐ๋ณธ์ ์ผ๋ก True์ด๊ธฐ ๋๋ฌธ์ Canvas๋ฅผ ์ถ๊ฐํ๋ฉด ๋ ๋๋ง์ด ๋ค์ ์์๋ฉ๋๋ค.
Pixi Application์ ์ ์ญ์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฒ์์ ์ํ๋ฅผ ์ ์งํ๋ฉด์ ํ์ด์ง๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค!!
์์ Pixi Application์ ์ ์ญ์ผ๋ก ์ด๊ธฐํ ํ์ง ์์ ์ด์ ๋ ์ด๋ฐ ๋ ๋๋ง ์ ์ด๋ฅผ ์ํจ์ธ๋ฐ์.
๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ค๋ ธ์ ๋ ๊ฒ์์ ๋ ๋๋ง์ ๊ณ์ ์งํ๋๊ณ ์๋ค๋ฉด ๋ถํ์ํ ์ฑ๋ฅ์ ์ธ ๋น์ฉ์ ์ง๋ถํด์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ์ญ์์ ์ด๊ธฐํ๋ฅผ ํ๋๋ผ๋ ์ด๋ฐ ๋ถ๋ถ์ ๊ตฌํํ ์ ์์ง๋ง React์ ๋ง์ดํธ ์ธ๋ง์ดํธ๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ ๊ฒ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฒ์์ ๋ง๋ค๊ธฐ ์ํด..
์์ React์์ Pixi๋ฅผ ์ด๋ป๊ฒ ์ด๊ธฐํ ํ๊ณ ์ค์ ํ๋์ง ์์๋ณด์๋๋ฐ์.
๊ฒ์์ ๋ง๋ค๊ธฐ ์ํด์๋ ์ฌ๋ฌ๊ฐ์ง ์์คํ ์ด ํ์๋ก ํ๊ณ ์๋นํ ๋ณต์กํ ์ ์์ต๋๋ค.
ํนํ Pixi๋ฅผ ์ฒ์ ์ ํ๋๋ฐ ๊ฒ์ ์์คํ ๊น์ง ์ง์ ๋ง๋๋ ค๊ณ ํ๋ฉด ์จ์ด ํฑ ๋งํ๋๋ฐ์.
์ด๋ฐ ์์คํ ์ ์ฒ์๋ถํฐ ์ง์ ๋ง๋๋ ๊ฒ ๋ณด๋ค๋ ์๋ ๋ ํฌ๋ฅผ ์ฐธ๊ณ ํ๋๊ฑธ ์ถ์ฒํฉ๋๋ค.
Pixi.js๋ก ๊ฒ์์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋ชจ์์ ์ ๊ณตํ๋ ๋ ํฌ์ ๋๋ค.
Snack Game๋ ์๋นํ ๋์์ ๋ง์ด ๋ฐ์๊ณ ์ฃผ์์ด ์์ธํ๊ฒ ์ ํ์์ด ๊ฒ์์ ์ํ ์์คํ ๋ค์ ์๋ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ ๊ต์ฒดํ๋ navigation ๊ฐ์ฒด, ๊ฐ์ฒด๋ฅผ ์ฌํ์ฉ ํ๊ธฐ ์ํ pool ๊ฐ์ฒด๋ฑ ๊ต์ฅํ ์ ์ฉํ๊ณ ๊ณต๋ถ๊ฐ ๋ ์ฝ๋๊ฐ ๋ง์ต๋๋ค.
๋ง๋ฌด๋ฆฌ์
์ฌ๊ธฐ๊น์ง Pixi.js๋ ๋ฌด์์ธ์ง, ์ฅ์ ์ ์ด๋ค๊ฒ ์๋์ง, React์์ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ค ๋ฐฉ์์ด ์ข์์ง ์์๋ณด์์ต๋๋ค.
๊ธฐ์กด์ ์ด์ฌํ ์ ์ํ๋ ๊ฒ์ ์ฝ๋๋ฅผ ์ ๋ถ ๋ฒ๋ฆฌ๊ณ ์๋กญ๊ฒ ๋ง๋ค์๋๋ฐ ์ด๊ฒ ์๊น์ง ์์์ ๋์ ๋ฐ์ ์ด ์์์ต๋๋ค.
์ฑ๋ฅ์ ๋ฌผ๋ก ์ด๊ณ ์ํ๋ ๋งํผ์ ํํธํ ์ ๋๋ฉ์ด์ ์ ์ ๊ณตํ ์ ์๊ฒ๋์ด ์ ๋ง ๋ง์กฑ์ค๋ฝ๋ค์.
์ด์์ผ๋ก ๊ธด ๊ธ ๋ง์น๊ฒ ์ต๋๋ค.
