Atölye › Scorched Earth Tarzı Topçu › 8/23. adım

Ateş!

Ne yapıyoruz

Boşluk namlunun ucundan bir mermi atsın. Merminin bir hızı var: namlunun yönü çarpı güç. state o an ne olduğunu ('aiming' nişan alınıyor, 'flying' mermi uçuyor…), turn sıranın kimde olduğunu (0 sen) tutuyor. Mermi küçük koyu bir top; uçması sonraki adımda.

```js
let turn // 0 or 1: whose shot it is
let shell // { x, y, vx, vy } or null
let state // 'aiming', 'flying', 'boom', 'won' or 'lost'

  turn = 0
  shell = null
  state = 'aiming'

function fire() {
  if (state !== 'aiming') return
  const t = tanks[turn]
  // The shell leaves from the end of the barrel.
  shell = {
    x: t.x + Math.cos(t.angle) * 14,
    y: t.y - 8 + Math.sin(t.angle) * 14,
    vx: Math.cos(t.angle) * t.power,
    vy: Math.sin(t.angle) * t.power,
  }
  state = 'flying'
}

  else if (event.key === ' ') {
    fire()
  } else return

  if (shell) {
    ctx.fillStyle = '#0f172a'
    ctx.beginPath()
    ctx.arc(shell.x, shell.y, 3, 0, Math.PI * 2)
    ctx.fill()
  }
```

Ne işe yarıyor

Sıra sende

  1. let tanks satırının altına turn, shell ve state yaz; reset'te tank döngüsünün altına üç satırı yaz.
  2. aimBy'ın üstüne fire fonksiyonunu yaz; tuş dinleyicisine else return'den önce Boşluk bloğunu ekle.
  3. draw'da tank döngüsünün altına mermi bloğunu yaz. Çalıştır ve Boşluk'a bas.

Beceriler: Klavye ve fare girdisi, Hız ve yerçekimi

Tüm adımlar

  1. Zemin
  2. Tepeler
  3. İki tank
  4. Namlu
  5. Oyun döngüsü
  6. Nişan al
  7. Açı ve güç
  8. Ateş!
  9. Uçuş
  10. Bum
  11. Kraterler
  12. Düşen tanklar
  13. Hasar
  14. Sırayla
  15. Bilgisayarın atışı
  16. Tanka isabet
  17. Kazan ya da kaybet
  18. Rüzgâr
  19. Bilgisayar nişan alıyor
  20. Fareyle nişan al
  21. Sürükle ve bırak
  22. atan2 tuzağı
  23. Kendin yap: iz