Atölye › Tuğla Kırma › 18/39. adım
Topun bir tuğlaya değip değmediğini soran bir fonksiyon yazacağız: hitsBrick. Topu da bir kutu gibi düşünebilirdik,
ama o zaman top köşelerde gözle görülür biçimde ıskaladığı tuğlaları da kırardı. Doğru yöntem kısa:
Bu adımda ekranda bir şey değişmeyecek; soruyu soran fonksiyonu hazırlıyoruz.
```js
function hitsBrick(brick) {
// The point of the brick closest to the ball's center; they touch if it is within one radius.
const nearestX = clamp(ball.x, brick.x, brick.x + BRICK_W)
const nearestY = clamp(ball.y, brick.y, brick.y + BRICK_H)
const dx = ball.x - nearestX
const dy = ball.y - nearestY
return dx * dx + dy * dy <= BALL_R * BALL_R
}
```clamp(ball.x, brick.x, brick.x + BRICK_W) → topun merkezini tuğlanın sol ve sağ kenarı arasına sıkıştırır. Top
tuğlanın solundaysa sonuç sol kenar, üstündeyse merkezin kendi x'i... nearestY aynısı dikeyde. İkisi birlikte
tuğlanın merkeze en yakın noktası. (clamp'in ikinci işi!)dx, dy → o noktadan topun merkezine yatay ve dikey fark.√(dx² + dy²). Karekök yavaş bir
işlemdir; iki tarafın karesini karşılaştırmak aynı cevabı verir: dx * dx + dy * dy <= BALL_R * BALL_R.return bu karşılaştırmanın sonucunu verir: true (değiyor) ya da false (değmiyor).function update() { satırının üstüne hitsBrick fonksiyonunu yaz; aralarında bir boş satır kalsın.
Çalıştır: ekran değişmez, kontroller yeşil olmalı.
Beceriler: Çarpışma tespiti
← Her sıraya bir renk Tuğla kır →