Atölye › Zelda Tarzı Zindan › 8/22. adım

Kılıç

Ne yapıyoruz

Boşluk (ya da pedin dışına bir dokunuş) kılıcı 12 kare boyunca sallasın. Kılıç kahramanın baktığı yönde, önünde bir kutu. Sallarken kahraman durur; Boşluk'u basılı tutmak kılıcı tekrar tekrar sallamaz.

```js
let swing // frames left of the sword swing

  swing = 0

  if (DIRS[event.key] || event.key === ' ') event.preventDefault()
  if (event.key === ' ' && !event.repeat) {
    if (swing === 0) swing = 12
  }

  else if (swing === 0) swing = 12

// The sword: a box from the middle of the player out to 30 pixels in front, so it also hits an enemy right on top of you.
function swordBox() {
  const [dx, dy] = player.dir
  const cx = player.x + SIZE / 2 + dx * 15
  const cy = player.y + SIZE / 2 + dy * 15
  const w = dx ? 30 : 8
  const h = dy ? 30 : 8
  return { x: cx - w / 2, y: cy - h / 2, w, h }
}

  if (dir && swing === 0) {

  if (swing > 0) swing -= 1

  if (swing > 0) {
    const s = swordBox()
    ctx.fillStyle = '#e5e7eb'
    ctx.fillRect(s.x, s.y, s.w, s.h)
  }
```

Ne işe yarıyor

Sıra sende

  1. const held satırının üstüne swing, reset'in en üstüne swing = 0 yaz.
  2. keydown'da preventDefault satırına Boşluk'u ekle ve altına sallama bloğunu yaz; dokunmada ped satırının altına else if satırını yaz.
  3. update'in üstüne swordBox yaz; if (dir) → if (dir && swing === 0); update'in sonuna geri sayım satırını yaz.
  4. draw'da ctx.restore() satırının üstüne kılıç bloğunu yaz. Çalıştır ve Boşluk'a bas.

Beceriler: Klavye ve fare girdisi, Oyun durumları

Tüm adımlar

  1. Bir oda
  2. Kahraman
  3. Oyun döngüsü
  4. Yürü
  5. Duvarlar
  6. Dokunmatik ped
  7. Sonraki oda
  8. Kılıç
  9. Düşmanlar
  10. Vur!
  11. Peşine düşüyorlar
  12. Dolaşıyorlar
  13. Ah
  14. Yanıp sönme ve kalpler
  15. Anahtarlar ve kalpler
  16. Hatırlayan dünya
  17. Kilitli kapı
  18. Süre
  19. Oyun bitti
  20. Çıkış merdiveni
  21. En iyi süre
  22. Kendin yap: temizlenen odalar