[์ ์๊ธฐ] ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์น ๊ฒ์ ๋ง๋ค๊ธฐ #1: ์ '์ด์ ํผํ๊ธฐ'์๋?
๊ฒ์์ ์๊ธฐ
[์ ์๊ธฐ] ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์น ๊ฒ์ ๋ง๋ค๊ธฐ #1: ์ '์ด์ ํผํ๊ธฐ'์๋?
์๋ ํ์ธ์! ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก์ ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ฒช๋ ๊ณ ๋ฏผ๊ณผ ํด๊ฒฐ ๊ณผ์ ์ ๊ธฐ๋กํ๋ ๋ธ๋ก๊ทธ์ ๋๋ค.
์ฒซ ํฌ์คํ ์ผ๋ก ์ต๊ทผ ์งํ ์ค์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ์น ๊ฒ์ ์ ์๊ธฐ๋ฅผ ์ฐ์ฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋จ์ํ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์ด, ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ง์ฃผํ ๊ธฐ์ ์ ๋์ ๋ค์ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
1. ์ ๊ฒ์ ๊ฐ๋ฐ์ ์ ํํ๋?
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๊ฒ HTML5 Canvas์ JavaScript๋ ์์ฃผ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๋ณต์กํ UI ํ๋ ์์ํฌ์์ ์ ์ ๋ฒ์ด๋, ์์ ๋ก์ง๋ง์ผ๋ก ํ๋ฉด์ ๊ฐ์ฒด๋ฅผ ์ ์ดํ๊ณ ๋ฌผ๋ฆฌ ์์ง(์ถฉ๋, ๊ฐ์๋ ๋ฑ)์ ๊ตฌํํด๋ณด๊ณ ์ถ์์ต๋๋ค.
๊ทธ์ค์์๋ '์ด์ ํผํ๊ธฐ' ์ฅ๋ฅด๋ฅผ ์ ํํ ์ด์ ๋ ๋ช ํํฉ๋๋ค.
- ๊ฐ์ฒด ๊ด๋ฆฌ: ํ๋ฉด์ ๋ฟ๋ ค์ง๋ ์๋ง์ ์ด์(Enemy)์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ก์ง ํ์ต
- ์ถฉ๋ ๊ฐ์ง: ์ํ ๋๋ ์ฌ๊ฐํ ์ถฉ๋ ํ์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
- ์ต์ ํ:
requestAnimationFrame์ ํ์ฉํ ๋งค๋๋ฌ์ด 60fps ์ ์ง
2. ๊ธฐ์ ์คํ ๋ฐ ํ๊ฒฝ ์ค์
๊ฐ์ฅ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ธํ๊ธฐ ์ํด ์๋์ ํ๊ฒฝ์ผ๋ก ์์ํ์ต๋๋ค.
- Language: JavaScript (ES6+)
- Rendering: HTML5 Canvas API
- Bundler: Vite (๋น ๋ฅธ HMR์ ์ํด ์ ํ)
3. ํต์ฌ ๋ก์ง: ํ๋ ์ด์ด ์์ง์ ๊ตฌํ
๊ฐ์ฅ ๋จผ์ ๊ตฌํํ ๊ฒ์ ํค๋ณด๋ ์
๋ ฅ์ ๋ฐ๋ฅธ ํ๋ ์ด์ด์ ๋ถ๋๋ฌ์ด ์ด๋์
๋๋ค. ๋จ์ํ keydown ์ด๋ฒคํธ์์ ์ขํ๋ฅผ ์์ ํ๋ฉด ์์ง์์ด ๋๋ ๋๊ธฐ๊ธฐ ๋๋ฌธ์, ํค ์ํ๋ฅผ ๊ฐ์ฒด์ ์ ์ฅํ์ฌ ํ๋ ์๋ง๋ค ์
๋ฐ์ดํธํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค.
const keys = {};
window.addEventListener("keydown", (e) => {
keys[e.code] = true;
});
window.addEventListener("keyup", (e) => {
keys[e.code] = false;
});
function update() {
if (keys["ArrowUp"]) player.y -= player.speed;
if (keys["ArrowDown"]) player.y += player.speed;
// ...์ข์ฐ ์ด๋ ๋ก์ง ๋์ผ
}
4. ์ฒซ ๋จ๊ณ๋ฅผ ๋ง์น๋ฉฐ (๊ณ ๋ฏผํ๋ ์ )
์ฒ์์๋ ๋จ์ํ๊ฒ ์ขํ๋ง ๊ณ์ฐํ๋ฉด ๋ ์ค ์์๋๋ฐ, ๋๊ฐ์ ์ด๋ ์ ์ด๋ ์๋๊ฐ ๋ฃจํธ 2๋ฐฐ๋งํผ ๋นจ๋ผ์ง๋ ์ด์๊ฐ ๋ฐ์ํ๋๊ตฐ์. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฒกํฐ ์ ๊ทํ ๊ฐ๋ ์ ๋ค์ ๊ณต๋ถํด์ผ ํ์ต๋๋ค.
๋ค์ ํฌ์คํ ์์๋ ์ด ๋๊ฐ์ ์ด๋ ๋ณด์ ๊ณผ ๋ณธ๊ฒฉ์ ์ธ ์ด์ ์์ฑ ๋ก์ง์ ๋ํด ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
๐ก ๋ง์น๋ฉฐ
ํ์ฌ ์ด ๋ธ๋ก๊ทธ๋ ์ ๋ํ ์ฌ์ฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ์์ผ๋ก ๊ฐ๋ฐ ์ง์๋ฟ๋ง ์๋๋ผ VSCode ํ์ฅ ํ๋ก๊ทธ๋จ ์ ์, ์น ์๋น์ค ์์ตํ ๊ณผ์ ๋ฑ ์ค์ ์ ์ธ ๊ฒฝํ๋ค์ ๊พธ์คํ ๊ณต์ ํ ์์ ์ด๋ ์์ฃผ ๋ฐฉ๋ฌธํด ์ฃผ์ธ์!
๊ถ๊ธํ ์ ์ด๋ ์กฐ์ธ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์ธ์ ๋ ๋จ๊ฒจ์ฃผ์ธ์.
๐ฎ ์ง๊ธ ๋ฐ๋ก ํ๋ ์ดํด๋ณด๊ธฐ
https://bullet-hell-creator--jh2001c12.replit.app
๐ ๊ฒ์์ด ์๋ณด์ด๋ฉด ๋ค์๋งํฌ์์ ํ์ธํ์ธ์
โฌ๏ธ ์ด ๊ธ์ด ๋์์ด ๋์ จ๋ค๋ฉด, ์๋ ๊ด๊ณ ๋ฅผ ํ ๋ฒ๋ง ํด๋ฆญํด์ฃผ์ธ์! ์ ์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค ๐โโ๏ธ โฌ๏ธ