Atölye › Pinball › 11/42. adım
Top bir duvara girdiyse onu dışarı itmeliyiz. Ama hangi yöne? Cevap: en yakın noktadan topun merkezine doğru. Bu yöne normal denir; duvardan dışarı, dik olarak bakan yön.
Topu bu yönde, duvara tam değecek kadar (uzaklık tam R olacak şekilde) geri koyuyoruz. Sonra update her
karede bütün duvarlar için hitSegment'i çağıracak.
```js
if (d >= R || d === 0) return false
const nx = (ball.x - px) / d
const ny = (ball.y - py) / d
ball.x = px + nx * R
ball.y = py + ny * R
return true
ball.y += ball.vy
for (const w of WALLS) hitSegment(w[0], w[1], w[2], w[3], 0.5)
```ball.x - px, ball.y - py → en yakın noktadan topun merkezine giden ok. Uzunluğu d./ d → oku kendi uzunluğuna bölmek onu 1 piksel uzunluğa indirir: yalnız yön kalır. Bu yön (nx, ny),
yani normal. Duvar dikse normal tam yatay, yataysa tam dikey olur; eğik duvarda eğik.ball.x = px + nx * R → en yakın noktadan normal yönünde R piksel git ve topu oraya koy. Top artık duvara
tam değiyor, içinde değil.for (const w of WALLS) hitSegment(w[0], w[1], w[2], w[3], 0.5) → her karede, top hareket ettikten sonra
bütün duvarları dene. w[0] duvar dizisinin ilk sayısı (x1), w[3] dördüncüsü (y2); dizilerde sayma 0'dan başlar.
Sondaki 0.5 duvarın esnekliği (bounce).hitSegment içinde if (d >= R || d === 0) return false satırının altına, return true satırının
üstüne dört satırı yaz.update içinde ball.y += ball.vy satırının altına for satırını yaz.Beceriler: Çarpışma tespiti
← Top duvara değiyor mu? Duvardan sek →