Atölye › Kule Savunması › 13/42. adım

Tıklamadan kareye

Ne yapıyoruz

Kuleleri fareyle kuracağız. Ama bir tıklama bize ekran pikseli verir; oyun ise canvas pikseliyle düşünür. İkisi aynı değildir: sayfa canvas'ı ekrana sığdırmak için büyütür ya da küçültür (telefonda küçük, büyük ekranda büyük).

tileAt önce çevirir, sonra hangi kareye tıklandığını bulur. Bu adımı unutmak tarayıcı oyunlarının en sık hatalarından biridir: canvas boyu değişince tıklamalar yanlış yere düşer.

```js
// Mouse and touch positions are in screen pixels; the canvas may be drawn smaller or bigger than its own pixels.
function tileAt(event) {
  const rect = canvas.getBoundingClientRect()
  const x = ((event.clientX - rect.left) * canvas.width) / rect.width
  const y = ((event.clientY - rect.top) * canvas.height) / rect.height
  return { x, y, col: Math.floor(x / TILE), row: Math.floor((y - TOP) / TILE) }
}
```

Ne işe yarıyor

Sıra sende

  1. pointAt fonksiyonunun altında bir boş satır bırakıp yorumu ve tileAt'i yaz.
  2. Çalıştır: ekranda fark yok; tıklamayı bir sonraki adımda bağlayacağız.

Beceriler: Klavye ve fare girdisi

Tüm adımlar

  1. Haritayı ölç
  2. Karelerden bir harita
  3. Her karede çiz
  4. Köşelerden yol
  5. Yolu doldur
  6. Yolu çiz
  7. Mesafeyle yürümek
  8. Yoldaki düşmanlar
  9. Yürü
  10. Yolun sonundan çıkış
  11. İşte geliyorlar
  12. Kuleler
  13. Tıklamadan kareye
  14. Tıkla ve kur
  15. Nereye kurabilirsin?
  16. Altını göster
  17. Tıklamadan önce göster
  18. Menzili göster
  19. Hedef seç
  20. Ateş!
  21. İsabet acıtır
  22. Güdümlü mermiler
  23. Sönen mermi
  24. Her av için altın
  25. Canlar
  26. Can çubukları
  27. Önce kur, sonra savun
  28. Boşluk dalgayı başlatır
  29. Dalga bitti
  30. Her dalga daha güçlü
  31. Daha sık
  32. Can bitti
  33. Oyun bitince kurmak yok
  34. En çok dayanılan dalga
  35. Oyun bitti ekranı
  36. Yeniden oyna
  37. Alt çubuk
  38. Tıklayarak başlat
  39. İkinci kule: top
  40. Kule düğmeleri
  41. Alan hasarı
  42. Kendin yap: kule sat