์ด์ ํธ
js ํฌ๋กฌ ๊ณต๋ฃก ๊ฒ์ ๋ง๋ค๊ธฐ
ํฌ๋กฌ ๊ณต๋ฃก๊ฒ์ js๋ก ๋ง๋ค๊ธฐ! ๊ฒ์์งํ์ฐ->์ข๋ก ์ฅ์ ๋ฌผ๋ค์ด ๋์จ๋ค. ์คํ์ด์ค๋ฐ๋ฅผ ๋๋ฅด๋ฉด ๊ณต๋ฃก์ด ์ ํ๋ฅผ ํ๋ค. ์ฅ์ ๋ฌผ๊ณผ ๊ณต๋ฃก์ด ์ถฉ๋ํ ๊ฒฝ์ฐ ์ข ๋ฃ index.html canvas ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ ๋ง๋ ๋ค. m
ranidiant.tistory.com
์๋ ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐํ์ฌ ๊ฒ์์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณด์๋ค.
- ๊ฒ์ ๋ฆฌ์ ๋ฒํผ ์ถ๊ฐ: ๊ฒ์ ์ค๋ฒ ๋ชจ๋ฌ์ ๋ฆฌ์ ๋ฒํผ์ ์ถ๊ฐํ๊ณ , ํด๋ฆญ ์ ๊ฒ์ ์ด๊ธฐํ
- ๊ฒ์ ์๋ ์ ์ง์ ์ฆ๊ฐ: ์ผ์ ์๊ฐ์ด ์ง๋ ๋๋ง๋ค ์ฅ์ ๋ฌผ์ ์ด๋ ์๋๊ฐ ์ฆ๊ฐ
- ์ ์(score) ์ถ๊ฐ: ๊ฒ์ ํ๋ ์ด ์ค์ ํ๋ํ ์ ์๋ฅผ ํ๋ฉด์ ํ์ํ๊ณ , ์ฅ์ ๋ฌผ์ ํผํ๊ฑฐ๋ ๋์ ์ ํ๋ํจ์ผ๋ก์จ ์ ์ ์ฆ๊ฐ
- ๋์ ์์ ์ถ๊ฐ ๋ฐ ์ถ๊ฐ ์ ์ ํ๋: ๋์ ์ด๋ผ๋ ์์๋ก ์ถ๊ฐ ์ ์ ํ๋
๋ฆฌ์ ๊ฒ์ ์ฌ์์
// ๋ฆฌ์
๋ฒํผ ํด๋ฆญ ์ ํธ์ถ๋ ํจ์
function resetGame() {
// ์บ๋ฒ์ค ์ด๊ธฐํ
ctx.clearRect(0, 0, canvas.width, canvas.height);
// ๋ณ์ ์ด๊ธฐํ
timer = 0;
cactusArr = [];
jump = false;
dino.y = groundHeight;
// ์๋ก์ด ๊ฒ์ ๋ฃจํ ์์
gameLoop();
}
๊ฒ์ ์ค๋ฒ ์ ๋ชจ๋ฌ ์ฐฝ์ด ํ์๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ฆฌ์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ค์ ๊ฒ์์ด ์์๋๋๋ก ํ๊ธฐ ์ํด resetGame ํจ์๊ฐ ์ฌ์ฉํ๋ค.
๋ชจ๋ ๊ฐ๋ค์ ์ด๊ธฐํ์์ผ์ฃผ๋๋ก ์ค์ ํ๋ค.
๊ฒ์ ์๋ ์ฆ๊ฐ
// ์ผ์ ํ๋ ์๋ง๋ค ์ฅ์ ๋ฌผ ์๋ ์ฆ๊ฐ
if (timer % 500 === 0) {
obstacleSpeed += obstacleSpeedIncrease;
}
๋์ด๋๊ฐ ์ถ๊ฐ๋์์ผ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.
๊ฒ์ ์๋ ์ฆ๊ฐ = ์ฅ์ ๋ฌผ์ด ์์ฑ๋๋ ์๋ ์ฆ๊ฐ
๋งค 500ํ๋ ์๋ง๋ค obstacleSpeed์ obstacleSpeedIncrease๋ฅผ ์ถ๊ฐํ์ฌ ์ฅ์ ๋ฌผ์ ์ด๋ ์๋๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
๊ฒ์์ด ์งํ๋จ์ ๋ฐ๋ผ ์ฅ์ ๋ฌผ์ด ๋ ๋นจ๋ฆฌ ์์ง์ด๋๋ก ๋ง๋๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ ์ฌ์ฉํ๋ค.
๋์ (์ฝ์ธ)
๋์ ์์๋ฅผ ๋ฃ์ด ์ ์ ์ถ๊ฐ ๊ฐ๋ ์ ๋ํ๋ค.
๋์ ์ ๋ง๋ค๊ธฐ ์ํด ์ฅ์ ๋ฌผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ ํด๋์ค๋ฅผ ์์ฑํ๊ณ , ๋์ ์ ์ด๊ธฐ ์์น์ ๊ฐ๊ฒฉ์ ์ค์ ํด์ผ ํ๋ค.
์ถฉ๋ ์ ๋์ ์ด ์ฌ๋ผ์ง๊ณ ์ ์๊ฐ ์ฌ๋ผ๊ฐ๋๋ก ๊ตฌํํ๋ฉด ๋๋ค. ์ด์ ์ฅ์ ๋ฌผ๊ณผ ๋์ผํ๊ฒ ์์ ํ๋ฉด ๋จ
const coinImage = new Image();
coinImage.src = '/images/coin.png'
// ๋์
class Coin {
constructor(){
this.width = 25;
this.height = 25;
this.x = canvas.width - this.width;
this.y = 100;
}
draw(){
ctx.drawImage(coinImage, this.x, this.y, this.width, this.height);
}
}
// ๋์ ์ถฉ๋ ์ฒดํฌ
coinArr.forEach((coin, index, arr) => {
if (coin.x + coin.width < 0) {
arr.splice(index, 1); // ํ๋ฉด์ ๋ฒ์ด๋ ์ฅ์ ๋ฌผ ์ ๊ฑฐ
}
coin.updatePosition(obstacleSpeed);
if (checkCollision(dino, coin)) {
arr.splice(index, 1); // ์ถฉ๋ํ ๋์ ์ ๊ฑฐ
score += 5;
}
});
- ์ฝ๋ ์ค๊ฐ ๋ถ๋ถ์ ์๋ต๋์ด ์์ต๋๋ค.
์ ์๋ฅผ ํ๋ํ๊ธฐ ์ํด์๋ ๋์ ๊ณผ ์ถฉ๋ ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํ๋ค๋ ์ ์ ์๊ฒ๋์๋ค..
์ฒ์์๋ ์ด ์ฌ์ค์ด ๋๋ฌด ๋น์ฐํด์ ์๊ฐํ์ง ๋ชปํ๋ค.
์ฅ์ ๋ฌผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ถฉ๋์ฌ๋ถ๋ฅผ ์ฒดํฌํด์ฃผ๋ ์ฝ๋๋ฅผ ๋์ผํ๊ฒ ์ฌ์ฉํ๋ค.
์ค์ฝ์ด
function updateScore(){
if (timer % obstacleSpawnInterval === 0) {
score++;
document.querySelector('.score span').textContent = score;
}
}
์ ์๊ฐ ์ฆ๊ฐํ๋ ์๋๋ ์ค์ ์๊ฐ์ ํ๋ฆ์ด ์๋๋ผ `obstacleSpawnInterval` ๊ธฐ์ค์ผ๋ก ์ค์ ๋์ด ์๋ค.
์ฅ์ ๋ฌผ์ด ์์ฑ๋๋ ํ๋ ์ ๊ฐ๊ฒฉ๋ง๋ค ์ ์๊ฐ 1์ฉ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์, ๊ฒ์ ์งํ ์๋์๋ ๋ณ๊ฐ๋ก ์ ์๊ฐ ์ฆ๊ฐํ๋ค.
์๊ฐ๊ธฐ์ค์ด ์๋๊ธฐ์ 1์ฉ ๋๋ฆฌ๋ค. ์์ํ๋ค๋ฉด ๋์ ๋๋ ๋ฌธ์ ์ด์ง๋ง ์ด ๋ถ๋ถ์ setInterval๋ก ์ด๋น์ผ๋ก ๊ตฌํํด์ผํ ์ง ๊ณ ๋ฏผ์ด๋ค.
gif๋ก ์ด๋ป๊ฒ ๋ง๋๋๊ฑฐ์ง..?
gif๋ก ๋ณํํด๋ดค๋๋ฐ ์ ์ด๋ด๊น์ ์ค์ ๋์๋ณด๋ค ์์ฒญ ๋๋ฆฌ๊ณ ๋ฒ๋ฒ ๊ฑฐ๋ ค๋ณด์ด๋ค์ฌ
์ค์ ์น์์๋ ์ด๋ณด๋ค ๋น ๋ฅด๊ณ ๋ฒ๋ฒ ์ ์์ด ์๋ ๋จ..
์ฐธ๊ณ : ์ฝ๋ฉ์ ํ https://www.youtube.com/watch?v=qkTtmgCjHhM
'js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
js ํฌ๋กฌ ๊ณต๋ฃก ๊ฒ์ ๋ง๋ค๊ธฐ (1) (0) | 2024.07.06 |
---|---|
๋๋ง์ cli ๋ง๋ค์ด์ npm ํจํค์ง ๋ฐฐํฌํด๋ณด๊ธฐ (0) | 2024.01.24 |
์น ํ์ด์ง์ lottie ํ์ผ ์ ์ฉํด๋ณด๊ธฐ (0) | 2023.06.20 |
Js, lastindexof ์ substring ์ ์ด์ฉํ์ฌ ํ์ผ ํ์ฅ์ ์ถ์ถํ๊ธฐ (0) | 2023.05.24 |
swiper ๋ง์ฐ์ค ์ฌ๋ ธ์ ๋ ์ฌ๋ผ์ด๋ ์ผ์์ ์ง autoplay stop (0) | 2023.05.02 |