πŸ”« μ΄μ•Œ μœ„μΉ˜ 작기 - FRONTENDBOOTCAMP-13th/JS-07-7zzang-Arcade GitHub Wiki

ꡬ뢄

  • λ‚ μ§œ : 2025.05.14
  • μ’…λ₯˜ : 버그
  • μ€‘μš”λ„ : 🟑

1. 문제 상황

ν”Œλ ˆμ΄μ–΄ μœ„μΉ˜ μ€‘μ•™μœΌλ‘œ μ΄μ•Œμ΄ λ°œμ‚¬ λ˜λ„λ‘ ν•΄μ•Ό ν•˜λŠ”λ°

image

μ™œ 살짝 였λ₯Έμͺ½μœΌλ‘œ λ°œμ‚¬κ°€ 될까? λΆ„λͺ… μ½”λ“œλŠ” λ§žλŠ”κ±° κ°™λ‹€..


2. μ½”λ“œ 첨뢀

 shoot() {
    // 1. μ΄μ•Œ μ’Œν‘œ 작기
    // x μ’Œν‘œλŠ” ν”Œλ ˆμ΄μ–΄μ˜ λ”± 쀑간 μœ„μΉ˜ λ”°λΌμ„œ width / 2 절반
    // y μ’Œν‘œλŠ” ν”Œλ ˆμ΄μ–΄μ˜ 머리 μœ„μΉ˜ y
    const bulletX = this.x + this.width / 2;
    const bulletY = this.y;

    // 2. μ΄μ•Œ μƒμ„±ν•˜κΈ° xμ’Œν‘œ, yμ’Œν‘œ, 넓이, 높이, μŠ€ν”Όλ“œ, 이미지, update, draw
    this.bullets.push({
      x: bulletX,
      y: bulletY,
      width: 20,
      height: 20,
      speedY: 3,
      sprite: bulletImg,
      // update ν•¨μˆ˜μ—λŠ” μ΄μ•Œμ΄ μ΄λ™ν•˜λŠ” λͺ¨μŠ΅μ„ κ΅¬ν˜„
      update() {
        // ν˜„μž¬ y μœ„μΉ˜μ—μ„œ μŠ€ν”Όλ“œ 만큼 λΉΌμ„œ μœ„λ‘œ μ˜¬λΌκ°€λ„λ‘ κ΅¬ν˜„
        this.y = this.y - this.speedY;
      },
      draw() {
        // ctx.drawImage(이미지, x, y, width, height);
        ctx.drawImage(this.sprite, this.x, this.y, this.width, this.height);
      },
    });
  },

μ„€λͺ…ν•˜μžλ©΄ bulletX 와 bulletY둜 μ’Œν‘œλ₯Ό μž‘λŠ”λ°,

ν˜„μž¬ ν”Œλ ˆμ΄μ–΄μ˜ μœ„μΉ˜λŠ” 0,0 μ’Œν‘œμ— μžˆκΈ°μ—, this.x 와 this.y μ—λŠ” 0, 0

this.width, this.heigth μ—λŠ” ν”Œλ ˆμ΄μ–΄μ˜ 크기인 70, 60 이 담겨 μžˆλ‹€.

λ”°λΌμ„œ bullet 의 μ’Œν‘œλŠ” ( 0 + 35, 0) β‡’ (35,0) 이닀. 그러면 쀑앙 μ•„λ‹ˆλƒκ΅¬μš”.

보쑰 κ°•μ‚¬λ‹˜μ—κ²Œ λ¬Όμ–΄λ³΄λ‹ˆ 문제점이 λ‚΄ image의 크기λ₯Ό μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ κ²ƒμ΄μ˜€λ‹€.. bullet μ΄λ―Έμ§€μ˜ μ‹œμž‘μ  0.0 은 μ™Όμͺ½ 상단 λΆ€ν„° μ‹œμž‘ν•˜λŠ” 점. κ·Έλž˜μ„œ μœ„ μ½”λ“œμ²˜λŸΌ μ€‘μ•™μœΌλ‘œ μ°μ—ˆμ§€λ§Œ μ € μ—¬λ°± 만큼 λ–¨μ–΄μ Έ 보인 κ²ƒμ΄μ˜€λ‹€..

κ°•μ‚¬λ‹˜μ΄ ν•΄κ²° λ°©λ²•μœΌλ‘œ μ΄μ•Œμ˜ 넓이 절반 만큼 λΉΌμ£Όλ©΄ λœλ‹€κ³  ν•΄μ£Όμ…”μ„œ const bulletX = this.x + this.width / 2- 10;으둜 λ°”κΏ”λ³΄λ‹ˆ λ°”λ‘œ

image (1)

μ€‘μ•™μœΌλ‘œ μ΄λ™ν•œλ‹€ ~~ ν•΄κ²° μ™„