Atölye › Kule Savunması › 22/42. adım
Mermiler güdümlü: her karede, hedefin şu anki yerine doğru dümdüz 0.3 kare ilerler. Hedef yürüse de mermi onu izler. Hedef bir adımdan yakınsa: isabet, mermi işini bitirmiştir.
Yönü bulmak için hedefe giden oku kendi uzunluğuna böleriz: böylece boyu 1 olan bir yön elde ederiz; onu 0.3 ile çarpınca adım çıkar.
```js
for (const b of bullets) {
const p = pointAt(b.target.d)
const dx = p.x - b.x
const dy = p.y - b.y
const distance = Math.hypot(dx, dy)
if (distance < 0.3) {
hit(b)
b.done = true
} else {
b.x += (dx / distance) * 0.3
b.y += (dy / distance) * 0.3
}
}
bullets = bullets.filter((b) => !b.done)
```const p = pointAt(b.target.d) → hedefin şu anki yeri.dx, dy → mermiden hedefe olan ok; distance → okun boyu (düz uzaklık).if (distance < 0.3) { → hedef bir adımdan yakınsa: hit(b) ile vur, b.done = true ile "işim bitti" diye
işaretle.else → değilse bir adım yaklaş: dx / distance oku 1 boyuna indirir (sadece yön kalır); * 0.3 adımı verir.bullets.filter((b) => !b.done) → işi bitmemiş mermileri tut. Mermileri döngünün içinde silmiyoruz; üzerinde
gezdiğimiz liste döngü sırasında değişmesin.update'in sonuna, kule döngüsünden sonra bir boş satır bırakıp mermi döngüsünü ve filter satırını yaz.Beceriler: Hız ve yerçekimi, Çarpışma tespiti