TIL

hyena_leeยท2022๋…„ 8์›” 24์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
7/42
post-thumbnail

๐ŸŽฏ shooting-game

๐Ÿฅฑ ์‰ฌ์–ด๊ฐ€๋Š” ํƒ€์ž„

๊ธฐ๋ณธ๊ฐ•์˜๋งŒ ๋“ฃ๋‹ค๋ณด๋ฉด ์žฌ๋ฏธ์—†๊ณ  ์ง€๋ฃจํ•˜๊ณ  ์ง‘์ค‘๋„ ๋–จ์–ด์ง€๊ธฐ ๋งˆ๋ จ์ด๋‹ค.
์šฐ์—ฐํžˆ youtube ์—์„œ ์ŠˆํŒ…๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ๋ผ๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ํฅ๋ฏธ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.
์ „๋ฐ˜์ ์œผ๋กœ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์ •๋ง ๋ฌด๋ฆฌ์—†์ด ์‰ฌ์–ด๊ฐ€๋Š” ํƒ€์ž„์ด์˜€๋‹ค.

๐Ÿ•น ๊ฒŒ์ž„์„ค๋ช… & ๊ตฌ์กฐ์žก๊ธฐ

  1. ์บ”๋ฒ„์Šค ์„ธํŒ…
  2. ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
  3. canvas drawImage()
    -> ๋ฌด์Šจ ์ด๋ฏธ์ง€ ๊ทธ๋ ค์ค„๊ฑด์ง€ / ๊ทธ ์ด๋ฏธ์ง€๋ฅผ ์–ด๋””์„œ ๊ทธ๋ ค์ค„๊ฑด์ง€(x.y ์ขŒํ‘œ)
  4. ๋ฐฉํ–ฅํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด
  5. ์šฐ์ฃผ์„ ์˜ xy ์ขŒํ‘œ๊ฐ€ ๋ฐ”๋€Œ๊ณ 
  6. ๋‹ค์‹œ render ๊ทธ๋ ค์ฃผ๊ธฐ
  1. ์ ๊ตฐ ๋งŒ๋“ค๊ธฐ , x, y, init, update
    x๊ฐ’ : (min, max)
    min=0, max= canvas.width-์ ๊ตฐ์‚ฌ์ด์ฆˆ
  2. ์ ๊ตฐ ์œ„์น˜๊ฐ€ ๋žœ๋ค
  3. ์ ๊ตฐ์ด ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค์˜จ๋‹ค
    -> y ์ขŒํ‘œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ณ  -> update() ๋ถˆ๋Ÿฌ์˜ค๋„๋ก ํ•œ๋‹ค.=> ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ์‹œํ‚ด
  4. 1์ดˆ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ ๊ตฐ์ด ๋‚˜์˜จ๋‹ค
    createEnemy() ๋งŒ๋“ค๊ณ 
    const interval = setInterval(ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ์€ ํ•จ์ˆ˜, ์‹œ๊ฐ„)
    const interval = setInterval(์ ๊ตฐ์ƒ์„ฑ, 1)
    ms๊ฐ€ ๋‹จ์œ„์ž„ 1s = 1000ms
    -> ์ ๊ตฐ์€ ์›น์‚ฌ์ดํŠธ๊ฐ€ ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ์ƒ์„ฑ -> render ๋ฅผ ํ•˜๊ธฐ
  5. ์ ๊ตฐ์˜ ์šฐ์ฃผ์„ ์ด ๋ฐ”๋‹ฅ์— ๋‹ฟ์œผ๋ฉด ๊ฒŒ์ž„ ์˜ค๋ฒ„
    -> gameOver ์ด๋ผ๋Š” ๋ณ€์ˆ˜ ์ƒ์„ฑ-> true ์ด๋ฉด ๊ฒŒ์ž„์ด ๋, false ๊ฒŒ์ž„์ด ์•ˆ ๋๋‚จ
    ->
  6. ์ ๊ตฐ๊ณผ ์ด์•Œ์ด ๋งŒ๋‚˜๋ฉด ์šฐ์ฃผ์„ ์ด ์‚ฌ๋ผ์ง„๋‹ค. ์ ์ˆ˜ 1์  ํšŒ๋“
    -> ์บ”๋ฒ„์Šค ๋†’์ด์—์„œ ์šฐ์ฃผ์„  ๋†’์ด๋งŒํผ ์˜ฌ๋ผ์˜จ ๊ฐ’ ์ขŒํ‘œ ์ˆœ๊ฐ„ ๋๋‚œ๋‹ค๋Š” ๊ฒƒ.
    -> if(this.y) >= canvas.height-์ ๊ตฐํฌํ‚ค {
    gameOver = true
    -> main () ๋”์ด์ƒ ํ˜ธ์ถœ ๋˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ฉˆ์ถ”๊ธฐ -> if(!gameOver)
    13.์ด์•Œ์ด ์ ๊ตญ์—๊ฒŒ ๋‹ฟ์œผ๋ฉด ์ฃฝ๋Š”๋‹ค
    -> ์ด์•Œ์˜ y๊ฐ’์ด ์ž‘์•„์ง€๊ณ  ์ ๊ตฐ์˜ y๊ฐ’๋ณด๋‹ค
    ์ด์•Œ.y <= ์ ๊ตฐ.y and
    ์ด์•Œ.x >= ์ ๊ตฐ.x and
    ์ ๊ตฐ.x + ์ ๊ตฐ์˜ ๋„“์ด
    => ๋‹ฟ์•˜๋‹ค => ์ด์•Œ์ด ์ฃฝ๊ฒŒ๋˜๊ณ , ์ ๊ตฐ์˜ ์šฐ์ฃผ์„ ์ด ์—†์–ด์ง=> ์ ์ˆ˜ ํš๋“

๐ŸŒˆ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ์ œ์ผ ๋‚œ๊ด€์ด์˜€๋‹ค.
์บ”๋ฒ„์Šค ํฌ๊ธฐ์— ๋งž์ถฐ์„œ ์šฐ์ฃผ์„ , ์ ๊ตฐ, ์ด์•Œ ์ด๋ฏธ์ง€ ์ฐพ๋Š”๋ฐ ์‹œ๊ฐ„์„ ๋งŽ์ด ์Ÿ์€ ๊ฒƒ ๊ฐ™์•˜๊ณ 
์ด์•Œ๊ณผ ์ ๊ตฐ์ด ๋‹ฟ์•˜์„ ๋•Œ ์ฃฝ๋Š” ์‹œ์  ๊ณ„์‚ฐ
์ ๊ตฐ์„ ๋‹ค ์ฃฝ์ด๊ณ  ๋นจ๋ฆฌ ๋นจ๋ฆฌ ์ž˜ ๋‚ด๋ ค์˜ค์ง€ ์•Š๋Š” ์ ..์•„์ง ๊ฐœ์„ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์šฐ์ฃผ์„ ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•„ ๋‹ค์‹œ ์ฐพ์•„๋ณด๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค.

๐Ÿ•น ์ตœ์ข…

https://youtu.be/0mOQCk1ONrg

profile
์‹ค์ˆ˜๋ฅผ ๋‘๋ ค์›Œ ๋ง๊ณ  ๊ณ„์† ๋„์ „ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์—ฌ์ •!

0๊ฐœ์˜ ๋Œ“๊ธ€